author認證模塊

author認證模塊

用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字段

  1. 利用一對一表關係,擴展字段

  2. 本身寫一個默寫類,繼承原來的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文件,捨棄大量的局部配置文件,該用全局配置文件。

相關文章
相關標籤/搜索