用auth模塊 你就用全套 不是本身寫一部分 用別人一部分css
建立超級管理員,用於登陸DJango admin的後臺管理html
命令:createsuperuser,輸入順序用戶名》郵箱》密碼》確認密碼。python
注意:全部密碼必定要設爲爲密文jquery
登陸實例:數據庫
views.pydjango
from django.shortcuts import render # Create your views here. from django.contrib import auth from django.contrib.auth.models import User def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user_obj = auth.authenticate(username=username,password=password) if user_obj: print(user_obj) print(user_obj.username) print(user_obj.password) auth.login(request,user_obj) # 執行完這一句只要可以拿到request的地方均可以經過request.user獲取當前登陸用戶對象 """該方法會主動幫你操做session表 而且只要執行了該方法 你就能夠在任何位置經過request.user獲取到當前登陸的用戶對象 """ return render(request,'login.html')
login.htmlbootstrap
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script> </head> <body> <form action="" method="post"> {% csrf_token %} <p>username:<input type="text" name="username"></p> <p>password:<input type="text" name="password"></p> <input type="submit"> </form> </body> </html>
該方法會有一個返回值 當條件存在的狀況下 返回就是數據對象自己條件不知足 直接返回None緩存
,返回密碼爲密文session
pbkdf2_sha256$36000$BcE7QVE95n4A$55xwX93B60dEIqKJcXd24+VoEVY4d0CtaTPkwmSDMhc=。
app
變化:
驗證auth.login(request,user_obj)
爲了方便,節省代碼量。咱們須要使用全局配置,在settings:
# auth校驗用戶是否登陸 全局配置跳轉url LOGIN_URL = '/login/'
效果能夠刪除django_session中的數據,從新登陸
修改密碼:
views.py
# 繼承上邊代碼 from django.contrib.auth.decorators import login_required @login_required def set_password(request): if request.method == 'POST': old_password = request.POST.get('old_password') new_password = request.POST.get('new_password') # 校驗原密碼對不對 is_right = request.user.check_password(old_password) print(is_right) if is_right: # 修改密碼 request.user.set_password(new_password) # 僅僅只會在內存中產生一個緩存 並不會直接修改數據庫 request.user.save() # 必定要點save方法保存 才能真正的操做數據庫 return redirect('/login/') return render(request,'set_password.html',locals())
set_password.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script> </head> <body> <form action="" method="post"> {% csrf_token %} <p>username<input type="text" disabled value="{{ request.user.username }}"></p> <p><input type="text" name="old_password"></p> <p><input type="text" name="new_password"></p> <input type="submit"> </form> </body> </html>
註冊功能演示:
views.py
def register(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') # models.User.objects.create(username=username,password=password) # User.objects.create(username=username,password=password) # 不用使用create 密碼會直接存成明文 # User.objects.create_user(username=username,password=password) # 建立普通用戶 User.objects.create_superuser(username=username,password=password,email='123@qq.com') # 建立超級用戶 郵箱字段必須填寫 # return render(request,'register.html')
register.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script> </head> <body> <form action="" method="post"> {% csrf_token %} <p>username:<input type="text" name="username"></p> <p>password:<input type="text" name="password"></p> <input type="submit"> </form> </body> </html>
擴展auth_user字段
利用一對一表關係,擴展字段
本身寫一個默寫類,繼承原來的auth_user類,而後在settings配置文中告訴Django使用新建的類代替原來的auth_user 表,由於已經建立完模型庫,因此只能換庫或者換項目。
這裏更換成MySQL數據庫
建表:
models.py
from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class Userinfo(AbstractUser): """ 強調 你繼承了AbstractUser以後 你自定義的表中 字段不能跟原有的衝突 """ phone = models.BigIntegerField() avatar = models.FileField() register_time = models.DateField(auto_now_add=True)
必定要在settings 中指定
# auth自定義表配置 AUTH_USER_MODEL = 'app01.Userinfo' # 固定語法: AUTH_USER_MODEL = '應用名.表名'
經過上邊的方式繼承的表,仍是能夠繼續使用auth模塊全部的功能
總結:相似於Django中的settings文件,捨棄大量的局部配置文件,該用全局配置文件。