日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django(part50)--Web请求认证

發布時間:2023/12/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django(part50)--Web请求认证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記,僅供參考


文章目錄

      • Web請求認證
        • 用戶認證authenticate
        • 用戶登錄login
        • 用戶登出logout
        • 舉個例子



Web請求認證


  • 相關函數
from django.contrib.auth import authenticate, login, logout

用戶認證authenticate


  • 函數用法
authenticate(username='用戶名', password='原始密碼')

該函數可以驗證用戶名和密碼是否合法,如果合法則返回User模型類的對象,如果不合法返回None


  • 官方示例
from django.contrib.auth import authenticate user = authenticate(username='john', password='secret') if user is not None:# 通過認證 else:# 沒有通過認證

在這個函數中,它不僅檢查了我們輸入的用戶名和密碼是否和存儲的相匹配,還檢查了id_active是否為True。


用戶登錄login


  • 函數用法
login(request, user) #user為User模型類創建的用戶對象 #request為HttpRequest對象

該方法使用Django的session框架,將用戶的信息保存在session中。


  • 示例
from django.contrib.auth import authenticate, logindef login_view(request):username = request.POST['username']password = request.POST['password']user = authenticate(request, username=username, password=password)if user is not None:login(request, user)#用戶的信息保存在session中# 重新指定登陸成功頁else:# 返回一個無效的登陸信息

用戶登出logout


  • 函數用法
logout(request)

通過django.contrib.auth.login()登入的用戶,可以使用django.contrib.auth.logout()退出登陸


  • 示例
from django.contrib.auth import logoutdef logout_view(request):logout(request)

舉個例子


  • 舉個例子1

現在,我們用我們的admin管理員賬號來演示用戶認證,用戶登錄和用戶登出.

在myuser應用下的views.py模塊中,我們創建兩個視圖處理函數,用于用戶認證、用戶登錄和用戶登出:

from django.shortcuts import render from django.http import HttpResponse from django.contrib.auth import models from django.contrib.auth import authenticate, login, logout # Create your views here.def mylogin(request):if request.method == "GET":return render(request, 'myuser/login.html', locals())elif request.method == "POST":username = request.POST.get('username', '')password = request.POST.get('password', '')try:user = authenticate(username = username,password = password)if user is not None:login(request, user) # print(request.session)return HttpResponse("登陸成功...")else:return HttpResponse("登錄失敗...")except:return HttpResponse("沒有此用戶...")def mylogout(request): # print("mylogout運行了...")logout(request)return HttpResponse("退出登錄...")

在myuser應用下的urls.py模塊中,我們創建兩個路由:

from django.urls import re_path from . import viewsurlpatterns = [re_path(r'^login/$', views.mylogin),re_path(r'^logout/$', views.mylogout), ]

現在,我們向admin數據庫后臺管理系統http://127.0.0.1:8000/admin/發起請求:

出現登錄頁面,也就是說,當前我們的并沒有登錄管理員賬號。

現在,我們向http://127.0.0.1:8000/myuser/login/發起請求,并登錄:

登錄成功后,我們再刷新一下admin數據庫后臺管理系統:

發現我們已經登錄啦!這是因為我們用login函數登錄后,我們的賬號信息就保存在了session中,此時,我們就處于登錄狀態了。

現在,我們向http://127.0.0.1:8000/myuser/logout/發起訪問,再刷新一下admin數據庫后臺管理系統:

我們發現,我們的管理員賬號已經被登出了。


  • 舉個例子2

現在,我么基于上一個例子的代碼,寫一個注冊界面。

首先,我們在myuser應用的urls.py文件中,添加1個路由:

from django.urls import re_path from . import viewsurlpatterns = [re_path(r'^login/$', views.mylogin),re_path(r'^logout/$', views.mylogout),re_path(r'^reg/$', views.myreg), ]

在在myuser應用的views.py模塊中,添加一個視圖函數:

def myreg(request):if request.method == "GET":return render(request, 'myuser/register.html')elif request.method == "POST":username = request.POST.get('username', '')password = request.POST.get('password', '')#這里我們先不做用戶認證try:user = models.User.objects.create_user(username = username,password = password)user.save()return HttpResponse("注冊成功...")except:return HttpResponse("注冊失敗...")

現在,我們向http://127.0.0.1:8000/myuser/reg/發起請求,并填入注冊信息:

點擊注冊:

查看mybookstore數據庫中的auth_user數據表:

mysql> select id, username, email, is_superuser from auth_user; +----+------------+----------------------+--------------+ | id | username | email | is_superuser | +----+------------+----------------------+--------------+ | 1 | goatbishop | goatbishop@gmail.com | 1 | | 2 | darkgoat | | 0 | +----+------------+----------------------+--------------+ 2 rows in set (0.01 sec)

可以看到,我們的數據表中多了一條普通用戶的賬號記錄。需要注意的是,普通用戶是不可以登錄到admin數據庫后臺管理界面的。

總結

以上是生活随笔為你收集整理的Django(part50)--Web请求认证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。