第72篇 Django auth模組完成使用者登入認證
阿新 • • 發佈:2018-11-16
views
from django.shortcuts import render,redirect,HttpResponse from django.contrib import auth from app01.models import UserInfo from django.contrib.auth.decorators import login_required # Create your views here. # 登入 def login(request): # 使用者輸入使用者名稱,密碼之後點選提交,收到POST請求 if request.method=='POST': username= request.POST.get('username') password= request.POST.get('password') # 呼叫auth.authenticate方法 傳入使用者名稱密碼去驗證 拿到一個驗證之後的結果 auth_obj = auth.authenticate(username=username,password=password) # 如果驗證通過 if auth: # 如果登入成功,把使用者的id儲存在session中 auth.login(request,auth_obj) return redirect('/index/') # 如果驗證不成功,繼續返回登入頁面,並返回前端提示資訊 else: return render(request,'logon.html',{'error_msg':'使用者名稱或密碼錯誤!!!'}) # 使用者GET請求 return render(request,'login.html') # 首頁 @login_required def index(request): return render(request,'index.html') # 登出 def logout(request): # 清除使用者的登入session資訊 並跳轉回登入頁面 auth.logout(request) return redirect('/login/') # 註冊 def reg(request): if request.method =='POST': username = request.POST.get('username') password = request.POST.get('password') # 假設資料有效性經過驗證,去資料庫中新增記錄 # 這裡千萬要小心是使用create_user在資料庫匯中總新增記錄 UserInfo.objects.create_user(username=username,password=password) # 註冊成功跳轉到login頁面 return redirect('/login/') return render(request,'reg.html')
models
from django.db import models # 繼承Django自帶的表格建立類 是一個抽象類 from django.contrib.auth.models import AbstractUser # Create your models here. GENDER_CHOICES = ((1,'女'),(2,'男'),(3,'保密')) DEFAULT_GENDER = 3 # 使用自己建立的UesrInfo表 來替代Django,auth模組自動建立的表的基礎上自定義一些其他的欄位, class UserInfo(AbstractUser): # 擴充套件auth表裡面沒有的欄位 gender = models.PositiveSmallIntegerField(choices=GENDER_CHOICES,default=DEFAULT_GENDER) phone = models.CharField(max_length=11)
setting
# LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' # TIME_ZONE = 'UTC' TIME_ZONE = 'Asia/Shanghai' # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' # 靜態資料夾的配置資訊 STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ] # auth模組的配置 LOGIN_URL = '/login/' # 專案登入頁面的路由 # 使用Django自帶的資料表 但是自定義增加一些其他的欄位 繼承使用的時候需要配置 AUTH_USER_MODEL = "app01.UserInfo" # 中間不需要寫models
index
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>index頁面!!!</title> </head> <body> <h1>這是index頁面!!!</h1> <h1>歡迎:{{ request.user.username }} 登入index頁面!!!</h1> <a href="/logout/">登出</a> </body> </html>
login
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>登入頁面!!</title> </head> <body> <form action=""method="post"> {% csrf_token %} <div> <label for="input_username">使用者名稱:</label> <input type="text" name="username" id="input_username"> </div> <div> <label for="input_pwd">密碼:</label> <input type="password" name="password" id="input_pwd"> </div> <input type="submit" name="" id=""> <p>{{ error_msg }}</p> </form> </body> </html>
reg
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>註冊頁面!!!</title> </head> <body> <form action=""method="post"> {% csrf_token %} <div> <label for="input_username">使用者名稱:</label> <input type="text" name="username" id="input_username"> </div> <div> <label for="input_pwd">密碼:</label> <input type="password" name="password" id="input_pwd"> </div> <div> <label for="re_input_pwd">再次輸入密碼:</label> <input type="password" name="re_password" id="re_input_pwd"> </div> <input type="submit" > </form> </body> </html>