Django——Auth模塊
一、Auth 模塊
Auth 用戶認(rèn)證,本質(zhì)上也是設(shè)置 Session。
Django 認(rèn)證系統(tǒng)同時(shí)處理認(rèn)證和授權(quán)
認(rèn)證:驗(yàn)證一個(gè)用戶是否為 django 聲明的用戶,如果是可以進(jìn)行登錄
授權(quán):決定一個(gè)已經(jīng)驗(yàn)證的用戶有哪些功能是允許操作。
在 django 遷移數(shù)據(jù)庫(kù)的是時(shí)候會(huì)自動(dòng)生成一個(gè)用戶認(rèn)證表:auth_user , 存放用戶基本信息(用戶名 , 密碼,郵箱……)
擴(kuò)建 auth_user 表中的字段數(shù)據(jù)
方法一:(不推薦)
創(chuàng)建一對(duì)一,綁定 auth_user 表
方法二:繼承AbstractUser
在定義模型類的時(shí)候繼承 AbstractUser , 進(jìn)行數(shù)據(jù)庫(kù)遷移不會(huì)生成 auth_user , 原有 auth_user 中的字段就繼承到自定義的模型類中。
實(shí)現(xiàn)字段的擴(kuò)建,直接在自定義模型類中添加額外新的字段即可。
擴(kuò)建 auth_user 表的前提:
1、在實(shí)現(xiàn)擴(kuò)建的時(shí)候,不允許,不能先執(zhí)行遷移數(shù)據(jù)庫(kù)(如果已經(jīng)遷移過(guò)數(shù)據(jù),那么就換一個(gè)新的數(shù)據(jù)庫(kù))
2、在擴(kuò)建中,只能添加字段,不可以修改原有的字段。
重新配置 auth 認(rèn)證模型類
# 配置自定義認(rèn)證模型類
# AUTH_USER_MODEL = '應(yīng)用名稱.類名稱'
AUTH_USER_MODEL = 'AuthApp.User'
from django.shortcuts import render , HttpResponse , redirect
from django.views import View
from AuthApp.models import User
from django.contrib.auth import authenticate , login
def index(request):
# request.user , 獲取用戶名
# AnonymousUser 匿名用戶,表示用戶名為登錄
print(request.user)
# 判斷用戶是否登錄
print(request.user.is_authenticated)
return render(request , 'index.html')
class RegisterView(View):
def get(self , request):
return render(request , 'register.html')
def post(self , request):
name = request.POST.get('username')
password = request.POST.get('password')
email = request.POST.get('email')
mobile = request.POST.get('mobile')
'''
create:保存用戶數(shù)據(jù) ,密碼不加密
create_user:密碼加密
'''
User.objects.create_user(username=name , password=password , email=email , mobile=mobile)
return redirect('/login/')
class LoginView(View):
def get(self , request):
return render(request , 'login.html')
def post(self , request):
name = request.POST.get('username')
password = request.POST.get('password')
# authenticate 認(rèn)證用戶信息 , 用戶存在返回用戶數(shù)據(jù) , 用戶不存在返回 None
user = authenticate(username=name , password=password)
if not user:
return render(request , 'login.html' , {'error_message':"用戶名或者密碼錯(cuò)誤"})
# login 登錄成功, 保存用戶登錄狀態(tài)
login(request , user)
return redirect('/index/')
實(shí)現(xiàn)驗(yàn)證登錄,以及退出登錄
# 配置全局的登錄重定向 url
LOGIN_URL = '/login/'
from django.contrib.auth.decorators import login_required
'''
login_required 用戶驗(yàn)證登錄的裝飾器
使用的時(shí)候需要配置局部的重定向 url
@login_required(login_url='/login/')
配置項(xiàng)目全局的從定向 url , 到配置文件中添加 login_url 的信息
'''
@login_required
def cart(request):
return HttpResponse('<h1>購(gòu)物車頁(yè)面</h1>')
# 注銷用戶信息之前必須保證用戶是登錄狀態(tài)
@login_required
def logoutview(request):
# 注銷用戶(清除 Session 中的用戶數(shù)據(jù))
logout(request)
return redirect('/login/')
二、admin 站點(diǎn)
django 提供的網(wǎng)站后臺(tái)數(shù)據(jù)管理
創(chuàng)建管理員用戶
python manage.py createsuperuser
注冊(cè)的時(shí)候,用戶名不要中文,用戶名和密碼不要有一串一致的數(shù)據(jù) ,郵箱允許為空 。
使用 admin 站點(diǎn)管理模型類數(shù)據(jù)
class Goods(models.Model):
# verbose_name 對(duì) admin站點(diǎn)中的模型類字段名稱設(shè)置,對(duì)數(shù)據(jù)庫(kù)不影響
name = models.CharField(max_length=50 , verbose_name='商品名稱')
price = models.DecimalField(max_digits=11 , decimal_places=3 , verbose_name='價(jià)格')
stock = models.IntegerField(verbose_name='庫(kù)存')
sales = models.IntegerField(verbose_name='銷量')
class Meta:
db_table = 'goods'
#設(shè)置 admin 站點(diǎn)中的表名
verbose_name = '商品數(shù)據(jù)表'
verbose_name_plural = verbose_name
注冊(cè)模型類 ; 到所在應(yīng)用下的 admin.py 文件中進(jìn)行注冊(cè)
from AdminApp.models import Goods
admin.site.register(Goods)
修改 admin 站點(diǎn)中的應(yīng)用名稱
在所在應(yīng)用中的__init__.py
添加
default_app_config = 'AdminApp.apps.AdminappConfig'
在對(duì)應(yīng)的應(yīng)用中的 apps.py 維納設(shè)置站點(diǎn)使用的應(yīng)用名稱
在 apps.py 的類中添加屬性
verbose_name = '商品表'
admin 模型類數(shù)據(jù)操作 , 在 admin.py 文件中操作
@admin.register(Goods)
class GoodsAdmin(admin.ModelAdmin):
# list_display 在站點(diǎn)中顯示指定字段數(shù)據(jù)信息
list_display = ['id' , 'name' , 'price' , 'sales']
# list_filter 選擇指定的字段作為條件過(guò)濾
list_filter = ['name' , 'sales']
# list_per_page 設(shè)置分頁(yè) , 指定每一頁(yè)有多少條數(shù)據(jù)
list_per_page = 2
# search_fields 配置搜索條件,數(shù)據(jù)類型要用元組
search_fields = ('id' , 'name')
# list_editable 在顯示列表頁(yè)中設(shè)置允許修改的字段數(shù)據(jù)
list_editable = ('name' , 'price')
# # fields 在編輯頁(yè)中指定字段允許修改
# fields = ('name' , 'price')
# fieldsets 設(shè)置編輯頁(yè)分組顯示數(shù)據(jù)
fieldsets = (
# ('分組名稱' , {'fields':[指定字段名]}
('商品基本信息' , {'fields':['name' , 'price']}),
('商品銷量信息' , {'fields':['sales' , 'stock']})
)
# 設(shè)置只讀字段
readonly_fields = ('name',)
在 admin 站點(diǎn)中可以自定義字段數(shù)據(jù) , 不影響數(shù)據(jù)庫(kù)
def num(g):
# 參數(shù) g , 下面的類會(huì)自動(dòng)的將模型類傳入
add = g.price * g.sales
return add
# 制作 num 在 admin 站點(diǎn)中的字段名
num.short_description = '商品銷售額'
@admin.register(Goods)
class GoodsAdmin(admin.ModelAdmin):
# list_display 在站點(diǎn)中顯示指定字段數(shù)據(jù)信息
list_display = ['id' , 'name' , 'price' , 'sales' , num]
遭周文而舒志文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-861599.html
鏈接:https://pan.baidu.com/s/1ir9eM2kL2D7hU9ZTNu4-Xw
提取碼:malw文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-861599.html
到了這里,關(guān)于Django——Auth模塊以及admin站點(diǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!