Django的auth【認證】模塊簡介

首先咱們先來複習一下路由別名如何使用,這裏僅僅複習一下二級路由的路由別名該如何使用html

·一、在視圖函數中使用二級路由別名,須要加上app的名稱+「:」+ 「路由別名」python

from django.urls import reverse

return redirect(reverse("app1:auth_index_view"))

  

 

 

二、在html文件中使用二級路由的別名,也 要經過app名在冒號來查找路由別名數據庫

<form action="{% url 'app1:auth_login_view_name' %}" method="post" novalidate >
    {% csrf_token %}
    {{ obj.username.label_tag }}{{ obj.username }}
    <span>{{ obj.errors.username.0 }}</span>
    {{ obj.userpwd.label_tag }}{{ obj.userpwd }}
    <span>{{ obj.errors.userpwd.0 }}</span>
{#    <a href="{% url 'app1:auth_login_view_name' %}">點我大</a>#}
    <input type="submit" value="提交">

</form>

  

 

這裏須要注意一下,若是是使用django2.0的版本,也就是url中使用path方法的話,若是要使用路由別名,須要按照下面的方式處理django

在project的urls中按照這樣設計cookie

urlpatterns = [
    path('admin/', admin.site.urls),
    path('app1/', include("app1.urls")),
    path('auth/', include("my_auth_app.urls",namespace="my_auth_app")),
]

  

在對應的app中按照下面的方式設計,務必要價格app_name的變量才能夠正常使用路由別名app

from django.contrib import admin
from django.urls import path
from django.urls import include
from my_auth_app import views
app_name = '[my_auth_app]'
urlpatterns = [

    # path('admin/', admin.site.urls),
    path('login/',views.login,name="auth_login"),
    path('index/',views.index,name="auth_index"),
    path('logout/',views.logout,name="auth_logout"),
]

  

 

 

 

 

下面咱們正式進入auth模塊的學習iphone

一、首先須要導入兩個模塊函數

from django.contrib import auth

  

from django.contrib.auth.models import User
# 建立用戶的模塊

  

 

二、而後這裏是auth模塊的具體的使用的方法post

def auth_login_view(request):
    method_type = request.method.lower()
    if method_type == "get":
        form_obj = my_new_forms()

        return render(request,"auth_login.html",{
            "obj":form_obj
        })
    else:
        username = request.POST.get("username")
        userpwd = request.POST.get("userpwd")
        user = auth.authenticate(username=username,password=userpwd)
        # 這裏必須是user用其餘的都不行,驗證用戶名和密碼是否經過校驗,若是經過則返回一個usr對象,若是不經過,則返回一個匿名用戶對象

        if user:
            auth.login(request,user)
            # 把username這個信息封裝到request.user中

            print(dir(user))


            from django.contrib.auth.models import User
            new_common_user = User.objects.create_user()
            # 建立普通用戶

            new_super_user = User.objects.create_superuser()
            # 建立超級管理員用戶


            error_create_user = User.objects.create()
            # 咱們不用這個方法建立用戶,這個方法建立的用戶的密碼不是加密的,通常也不能用


            user = User.objects.get(username="aaa")
            user.set_password()
            user.save()
            # 修改密碼,這裏須要保存才能生效


            user.check_password()
            # 用戶須要修改密碼的時候,首先先判斷當前輸入的密碼對不對



            return redirect(reverse("app1:auth_index_view"))
        else:
            return redirect(reverse("app1:auth_login_view_name"))

  

三、auth模塊還自帶一個裝飾器,用來判斷用戶是否登錄,也須要先導入一個模塊學習

from django.contrib.auth.decorators import login_required
# 判斷用戶是否登錄的裝飾器

  

@login_required
# django自帶的裝飾器,判斷某個用戶是否登錄
def auth_index_view(request):
    print(request.user.is_authenticated())
    # 判斷某個用戶是否登錄,若是是則返回true

    return render(request,"auth_index.html",{"name":request.user.username})

  

這裏若是用戶沒有登錄成功,則頁面須要跳轉到某個頁面,這個頁面須要在settings中配置

# 若是沒有登錄地登錄,默認跳轉到哪一個url
LOGIN_URL = "http://www.baidu.com"

  

 

四、auth模塊的註銷的方法

def logout(request):
    auth.logout(request)
    # auth.logout方法,刪除cookies和seesion

    return redirect(reverse("app1:auth_login_view_name"))

  

 

另外,django默認的user表中只有有限的字段,若是咱們想擴展其中的字段該怎麼處理呢,這裏咱們有2種辦法能夠處理

方法1,新建一個表,一對一到user表中

# 一、新建一個表,一對一關聯auth_user表
from django.contrib.auth.models import User
# 先把django自帶的user這個表導入


class User_detail(models.Model):
    phone = models.CharField(max_length=11)
    usr_obj = models.OneToOneField(to=User)
    # 一對一關聯到django自帶的user表

  

方法2,使用繼承的方法,這裏須要注意,若是使用繼承的方法,則django的數據庫中就乜有auth_user表中了,因此上面的方法中若是用auth_user這個表,則只須要修改代表爲咱們的表名稱

from django.contrib.auth.models import AbstractUser

# Create your models here.

class Userinfo(AbstractUser):

    iphone = models.CharField(max_length=11,null=True,blank=True)
    email = models.CharField(max_length=64,null=True,blank=True)
    create_time = models.DateTimeField(auto_now_add=True,blank=True)

    def __str__(self):
        return self.username

  

而後須要在setting中設置

AUTH_USER_MODEL = "app1.Userinfo"

  

 

django就沒有User表了,替換爲咱們的Userinfo表了,咱們新添加的字段也補充進去了

 

 

 

若是咱們採用擴展的方式擴展默認的user表,則auth模塊仍是能夠繼續使用的,可是若是要建立新的用戶,則須要使用咱們新建立的表

                from app1 import models
                user_obj = models.Userinfo.objects.create_user(username="alex5", password="alexdsb")

 

咱們能夠看到建立的新的用戶成功了

 

 

 咱們使用新的用戶登錄

 

 

一樣若是要修改密碼,也須要到新的表中操做

                user_obj = models.Userinfo.objects.filter(username="alex5")[0]
                user_obj.set_password("admin123.")
                user_obj.save()
相關文章
相關標籤/搜索