Django——Auth模块以及admin站点

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 认证模型类

# 配置自定义认证模型类
# AUTH_USER_MODEL = '应用名称.类名称'
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 , 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/')

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

# 配置全局的登录重定向 url
LOGIN_URL = '/login/'
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 manage.py createsuperuser

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

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

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 文件中进行注册

from AdminApp.models import Goods
admin.site.register(Goods)

修改 admin 站点中的应用名称

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

default_app_config = 'AdminApp.apps.AdminappConfig'

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

在 apps.py 的类中添加属性

verbose_name = '商品表'

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

@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 站点中可以自定义字段数据 , 不影响数据库

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.mzph.cn/diannao/4154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python3操作redis百万级数据迁移,单机到单机,集群到集群

Python3操作redis大量数据迁移 脚本 背景使用前使用注意事项脚本总结 背景 之前写过一个用python迁移redis的脚本&#xff0c;但是对于小批量的数据、单节点的&#xff0c;还可以用。对于大量数据&#xff0c;集群模式的就不太适合了。所以写了下面的脚本&#xff0c;而且做了…

【前端开发基础知识快速入门】

前端开发基础知识&快速入门 一、VSCode 使用1.1 安装常用插件1.2 创建项目1.3 创建网页1.4 运行效果二、ES62.1 简介2.2 什么是 ECMAScript2.3 ES6 新特性2.3.1 let 声明变量2.3.2 const 声明常量(只读变量)2.3.3 解构表达式2.3.4 字符串扩展2.3.5 函数优化2.3.6 对象优化…

Ubuntu中apt更新时报错The certificate issuer is unknown的解决办法

Ubuntu 22.04更新apt出现The certificate issuer is unknown的解决办法 问题描述解决办法讨论 问题描述 使用docker安装Ubuntu22.04&#xff0c;官网给出的镜像只是一个裸系统&#xff0c;预装软件很少。换阿里源以后&#xff0c;apt update&#xff0c;出现如下报错&#xff…

【C语言】动态内存分配(一)

目录 1.为什么要有动态内存分配 2.malloc和free 2.1malloc 2.2free 1.为什么要有动态内存分配 我们已经掌握的内存开辟方式有: 但是上述的开辟空间的方式有两个特点: ⭐空间开辟大小是固定的。 ⭐数组在申明的时候&#xff0c;必须指定数组的长度&#xff0c;数组空间一旦…

GateWay具体的使用之全局token过滤器

1: 创建过滤器类 首先&#xff0c;你需要创建一个实现了GatewayFilter接口或者继承AbstractGatewayFilterFactory类的过滤器类。这里以实现GatewayFilter接口为例&#xff0c;创建一个全局token过滤器。 package com.by.filter;import cn.hutool.core.collection.CollUtil; imp…

SQL提升

1. SQL TOP 子句 TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说&#xff0c;TOP 子句是非常有用的。 **注释&#xff1a;**并非所有的数据库系统都支持 TOP 子句。 1.1 SQL TOP 语法 SQL Server 的语法&#xff1a; SELECT TOP number|percent c…

OpenCV C++实现区域面积筛选以及统计区域个数

目录 1、背景介绍 2、代码实现 2.1 获取原图 2.1.1 区域图像imread 2.1.2 具体实现 2.2 获取图像大小 2.3 阈值分割 2.3.1 阈值分割threshold 2.3.2 具体实现 2.4 区域面积筛选 2.4.1 获取轮廓findContours 2.4.2 获取轮廓面积contourArea 2.4.3 填充区域fil…

http请求与响应

目录 HTTP请求格式 HTTP响应格式 HTTP请求格式 请求行&#xff1a;请求数据第一行(请求方式&#xff0c;资源路径&#xff0c;协议) 请求头&#xff1a;第二行开始&#xff0c;格式key:value 请求体&#xff1a;POST请求&#xff0c;存放在请求参数 非restful方式&#xff1…

浅谈大数据时代下的电商风控||电商数据API接口

抢抢抢&#xff01;最后1天&#xff0c;双十一直播活动来啦&#xff01;抢直播专属优惠…… 视频号 随着大数据时代的兴起&#xff0c;互联网电商风控已经从无风控、人工抽取规则为主的简易规则模型发展到当前基于大数据的风控。与金融风控不同&#xff0c;互联网电商风控呈现出…

详解MyBatis配置文件开发与注解式开发

首先呢&#xff0c;五一快来啦&#xff01;提前祝各位宝子们五一玩得开心&#xff0c;然后讲解一下MyBatis框架呀!!! 一.框架介绍 MyBatis 的主要特点 二.MyBatis工作流程 1. 初始化和配置 2. 创建 SqlSessionFactory 3. 获取 SqlSession 4. 映射器绑定 5. 执行操作 6.…

力扣1518. 换水问题

题目链接 力扣1518. 换水问题 简单方法(模拟) 思路 对换水进行模拟&#xff0c;每次喝完 n u m E x c h a n g e numExchange numExchange 瓶水后就去换一瓶水&#xff0c;直到不能再兑换为止&#xff0c;也就是剩余水的数量小于 n u m E x c h a n g e numExchange numE…

vscode中jsconfig.json文件首行提示错误

在使用react框架开发前端时&#xff0c;文件jsconfig.json首行提示错误&#xff0c;打开设置&#xff0c;勾选如下图这项

jupyter lab 如何安装和启动

Jupyter Lab 是一种基于 web 的交互式开发环境&#xff0c;用于 Jupyter 笔记本。与传统的 Jupyter 笔记本相比&#xff0c;它提供了更友好、更可扩展的界面&#xff0c;具有代码单元格、markdown 单元格、小部件和文件浏览器等功能。 1.安装 Jupyter Lab: 打开终端或命令提示…

【Go】通道作为函数参数

目录 一、Pings Pongs例子程序 二、使用通道进行任务分配和结果收集 三、使用通道进行错误处理 四、使用通道实现速率限制 五、使用通道进行数据同步 总结 共性 解决的问题类型 实际应用示例 Go 语言中&#xff0c;通道&#xff08;channel&#xff09;是实现协程&…

Linux 第十一章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

Java 图形化框架 - AWT、Swing

文章目录 关于 AWTAWT继承体系 关于 Swing关于 JFC 和 Swing Swing 组件组件层次Swing组件和AWT组件的对应关系&#xff1a;Swing组件按照功能来分类&#xff1a; Java使用AWT和Swing相关的类可以完成图形化界面编程&#xff0c;其中AWT的全称是抽象窗口工具集(Abstract Window…

北大发现了一种特殊类型的注意力头!

检索头的发现或许将有力地帮助大模型领域在提高长上下文推理能力、减少幻觉和压缩KV缓存方面的研究。 从 Claude100K 到 Gemini10M&#xff0c;我们正处于长上下文语言模型的时代。如何在长上下文中利用任何输入位置的信息&#xff1f;北大联合另外四所高校发现了一种特殊类型…

(四)后台-对文章的增删改查操作

&#xff08;四&#xff09;后台-对文章的增删改查操作 文章目录 &#xff08;四&#xff09;后台-对文章的增删改查操作一、RESTFUL API二、路由处理1、/home 后台首页页面2、/upload 文件上传功能 三、文章模块1、/list 获取文章列表 GetList2、/ 新增|编辑文章 SaveOrUpdate…

AI 提示词生成器

https://prompt-generator.ilovecoke.cc/参考 AI 提示词生成器

docker部署前端项目(三)简易迅速版本

前两个docker 部署都出现了 意外&#xff0c;通过dockerfile 文件操作的时候&#xff0c; 不是 npm 无法下载&#xff0c;就是 npm build 无法打包 总是困难重重&#xff0c;原因甚多&#xff0c;不是网络导致&#xff0c;就是版本不对&#xff0c; 原因可能是 node 版本和 npm…