1. 程式人生 > 其它 >java基礎_Date日期時間

java基礎_Date日期時間

強調

  """
  其實我們在建立好一個django專案之後直接執行資料庫遷移命令會自動生成很多表
django_session
auth_user
  django在啟動之後就可以直接訪問admin路由,參考auth_user表,並且還必須是管理員使用者才能進入

  使用auth模組,要用就用全套,要不就不用
  """

用法

  # 建立超級使用者(管理員使用者)
  python manage.py createsuperuser

  # 依賴於auth_user,完成使用者相關功能
  # 必須掌握
  from django.contrib import auth
  # 1.自動獲取表,自動給密碼加密再比對
  # 該方法注意事項:括號內必須同時傳入使用者名稱和密碼
  # 該方法有返回值,使用者物件;資料不符合則反會None
  user_obj = auth.authenticate(request,username=username,password=password)
  if user_obj:
      # 2.儲存使用者狀態
      # 該方法,只要執行了該方法,你就可以在任何地方通過request.user獲取到當前登入的使用者物件;未登入拿到的是AnonymousUser,匿名使用者
      auth.login(request, user_obj) # 類似於request.session[key]=user_obj
      # 3.判斷使用者是否登入
      request.user.is_authenticated()
      # 4.使用者登入之後才能執行的功能
      from django.contrib.auth.decorators import login_required
      @login_required(login_url='/login/') # 區域性配置:加引數,當用戶沒有登入的情況下,跳轉得到對應路徑下
      """
      沒有登入,跳轉到指定頁面,全域性配置,settings檔案中
      LOGIN_URL = '/login/'

      如果區域性和全域性都有,那麼會使用區域性的
      區域性和全部哪個好呢?====全域性的好處在於無需重複寫程式碼,但是跳轉的頁面很統一
      區域性可以自定義跳轉頁面
      """
      # 5.修改密碼
      is_correct = request.user.check_password(old_password) # 自動加密比對密碼
      request.user.set_password(new_password)  # 修改物件屬性
      request.user.save() # 這一步才是真正的操作資料庫
      # 6.登出使用者
      auth.logout(request) # 直接去session表中將該物件刪除,類似session.flush()
      # 7.註冊功能
      from django.contrib.auth.models import User
      # 建立普通使用者
      User.objects.create_user(username=username,password=password)
      # 建立超級使用者,使用程式碼建立,郵箱必填
      User.objects.create_superuser(username=username,email='',password=password)

如何擴充套件auth_user表

  第一種:一對一關係
  第二種:利用面向物件的繼承
  class UserInfo(AbstractUser):
      """
      如果繼承了AbstractUser
      那麼在執行資料庫遷移命令的時候auth_user表就不會在創建出來了,而UserInfo表中
      會出現auth_user所有的欄位外加自己擴充套件的欄位

      前提:
	      1.在繼承之前沒有執行過資料庫遷移命令(auth_user沒有被建立)
		auth_user沒有被建立,如果當前庫已經建立了那麼你就重新換一個庫
	      2.繼承的類裡面不要覆蓋AbstractUser裡面的欄位名
		表裡面有的欄位都不要動,只擴充套件外欄位即可
	      3.需要在配置檔案中告訴django你要用UserInfo替代auth_user
		AUTH_USER_MODEL = 'app01.UserInfo' 應用名.表名
		
      總結:如果自己寫表替代了auth_user那麼auth模組的功能還是正常使用,參考的表有原來的auth_user變成了UserInfo
      """