Django——Auth模块以及admin站点

ops/2024/10/18 8:34:55/

Django——Auth模块

一、Auth 模块

Auth 用户认证,本质上也是设置 Session。

Django 认证系统同时处理认证和授权认证:验证一个用户是否为 django 声明的用户,如果是可以进行登录授权:决定一个已经验证的用户有哪些功能是允许操作。

django 迁移数据库的是时候会自动生成一个用户认证表:auth_user , 存放用户基本信息(用户名 , 密码,邮箱……)

扩建 auth_user 表中的字段数据方法一:(不推荐)创建一对一,绑定 auth_user 表方法二:继承AbstractUser
在定义模型类的时候继承 AbstractUser , 进行数据库迁移不会生成 auth_user , 原有 auth_user 中的字段就继承到自定义的模型类中。
实现字段的扩建,直接在自定义模型类中添加额外新的字段即可。扩建 auth_user 表的前提:1、在实现扩建的时候,不允许,不能先执行迁移数据库(如果已经迁移过数据,那么就换一个新的数据库)2、在扩建中,只能添加字段,不可以修改原有的字段。

重新配置 auth 认证模型类

python"># 配置自定义认证模型类
# AUTH_USER_MODEL = '应用名称.类名称'
AUTH_USER_MODEL = 'AuthApp.User'
python">from django.shortcuts import render , HttpResponse , redirect
from django.views import View
from AuthApp.models import User
from django.contrib.auth import authenticate , logindef 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:保存用户数据 ,密码不加密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 认证用户信息 , 用户存在返回用户数据 , 用户不存在返回 Noneuser = authenticate(username=name , password=password)if not user:return render(request , 'login.html' , {'error_message':"用户名或者密码错误"})# login 登录成功, 保存用户登录状态login(request , user)return redirect('/index/')

实现验证登录,以及退出登录

python"># 配置全局的登录重定向 url
LOGIN_URL = '/login/'
python">from django.contrib.auth.decorators import login_required
'''
login_required 用户验证登录的装饰器
使用的时候需要配置局部的重定向 url
@login_required(login_url='/login/')配置项目全局的从定向 url , 到配置文件中添加 login_url 的信息
'''
@login_required
def cart(request):return HttpResponse('<h1>购物车页面</h1>')# 注销用户信息之前必须保证用户是登录状态
@login_required
def logoutview(request):# 注销用户(清除 Session 中的用户数据)logout(request)return redirect('/login/')

二、admin 站点

django 提供的网站后台数据管理

创建管理员用户

python">python manage.py createsuperuser

注册的时候,用户名不要中文,用户名和密码不要有一串一致的数据 ,邮箱允许为空 。

使用 admin 站点管理模型类数据

python">class Goods(models.Model):# verbose_name 对 admin站点中的模型类字段名称设置,对数据库不影响name = models.CharField(max_length=50 , verbose_name='商品名称')price = models.DecimalField(max_digits=11 , decimal_places=3 , verbose_name='价格')stock = models.IntegerField(verbose_name='库存')sales = models.IntegerField(verbose_name='销量')class Meta:db_table = 'goods'#设置 admin 站点中的表名verbose_name = '商品数据表'verbose_name_plural = verbose_name

注册模型类 ; 到所在应用下的 admin.py 文件中进行注册

python">from AdminApp.models import Goods
admin.site.register(Goods)

修改 admin 站点中的应用名称

在所在应用中的__init__.py添加

python">default_app_config = 'AdminApp.apps.AdminappConfig'

在对应的应用中的 apps.py 维纳设置站点使用的应用名称

在 apps.py 的类中添加属性

python">verbose_name = '商品表'

admin 模型类数据操作 , 在 admin.py 文件中操作

python">@admin.register(Goods)
class GoodsAdmin(admin.ModelAdmin):# list_display 在站点中显示指定字段数据信息list_display = ['id' , 'name' , 'price' , 'sales']# list_filter 选择指定的字段作为条件过滤list_filter = ['name' , 'sales']# list_per_page 设置分页 , 指定每一页有多少条数据list_per_page = 2# search_fields 配置搜索条件,数据类型要用元组search_fields = ('id' , 'name')# list_editable 在显示列表页中设置允许修改的字段数据list_editable = ('name' , 'price')# # fields 在编辑页中指定字段允许修改# fields = ('name' , 'price')# fieldsets 设置编辑页分组显示数据fieldsets = (# ('分组名称' , {'fields':[指定字段名]}('商品基本信息' , {'fields':['name' , 'price']}),('商品销量信息' , {'fields':['sales' , 'stock']}))# 设置只读字段readonly_fields = ('name',)

在 admin 站点中可以自定义字段数据 , 不影响数据库

python">def num(g):# 参数 g , 下面的类会自动的将模型类传入add = g.price * g.salesreturn add
# 制作 num 在 admin 站点中的字段名
num.short_description = '商品销售额'@admin.register(Goods)
class GoodsAdmin(admin.ModelAdmin):# list_display 在站点中显示指定字段数据信息list_display = ['id' , 'name' , 'price' , 'sales' , num]

遭周文而舒志

链接:https://pan.baidu.com/s/1ir9eM2kL2D7hU9ZTNu4-Xw
提取码:malw


http://www.ppmy.cn/ops/20338.html

相关文章

探索开源的容器引擎--------------Docker容器操作

目录 一、Docker 容器操作 1.1容器创建 1.2查看容器的运行状态 1.3启动容器 1.4创建并启动容器 1.4.1当利用 docker run 来创建容器时&#xff0c; Docker 在后台的标准运行过程是&#xff1a; 1.4.2在后台持续运行 docker run 创建的容器 1.4.3创建容器并持续运行容器…

391.C# ML.net 情绪分析

391.C# ML.net 情绪分析 常见应用场景 社交媒体监控&#xff1a;企业和品牌可以使用二元情绪分类器来监控社交媒体上的公众情绪&#xff0c;了解客户对产品或服务的看法&#xff0c;以及市场对新发布或事件的反应。客户服务&#xff1a;自动化客户服务工具&#xff08;如聊天机…

LLaMA 3:大模型之战的新序幕

作者 | 符尧 OneFlow编译 翻译&#xff5c;杨婷、宛子琳、张雪聃 本文要点概览&#xff1a; 文本数据的扩展可能已经达到了极限&#xff0c;因为易于获取的网络文本资源&#xff08;如Common Crawl、GitHub、ArXiv等&#xff09;已基本被充分利用。 尽管如此&#xff0c;通过更…

本地认证的密码去哪了?怎么保证安全的?

1. windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff1f;密文存在哪个文件下?该文件是否可以打开&#xff0c;并且查看到密文&#xff1f; 系统将输入的明文密码通过hash算法转为哈希值&#xff0c;且输入的值会在内存中立即删除无法查看。 然后将密文存放在C:…

Webfunny前端监控如何接入飞书单点登录(SSO)

Hello&#xff0c;大家好&#xff0c;欢迎使用**webfunny前端监控和埋点平台**。今天我们将介绍一下如何接入飞书的登录系统。 友情提示&#xff1a;如果飞书侧已经配置好了&#xff0c;可以直接跳到第六步阅读。 一、创建飞书网页项目 进入飞书开发者后台&#xff0c;创建企…

(七)Servlet教程——Idea编辑器集成Tomcat

1. 点击桌面上Idea快捷方式打开Idea编辑器&#xff0c;假如没有创建项目的话打开Idea编辑器后的界面展示如下图所示 2. 点击界面左侧菜单中的自定义 3. 然后点击界面中的“所有设置...”,然后点击“构建、执行、部署”&#xff0c;选择其中的“应用程序服务器” 4. 点击“”按钮…

数据结构––串

5.1 串的定义 由零个或者任意多个字符组成的有限序列&#xff0c;是一种特殊的顺序表&#xff0c;每一个元素都是单独一个字符 空格也可以是一个字符 串的长度&#xff1a;串中的有效元素的个数&#xff08;不包括\0&#xff09; 空串&#xff1a;不包括任何元素的串&#…

python中如何用matplotlib写雷达图

#代码 import numpy as np # import matplotlib as plt # from matplotlib import pyplot as plt import matplotlib.pyplot as pltplt.rcParams[font.sans-serif].insert(0, SimHei) plt.rcParams[axes.unicode_minus] Falselabels np.array([速度, 力量, 经验, 防守, 发球…