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 , 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:保存用户数据 ,密码不加密
        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 认证用户信息 , 用户存在返回用户数据 , 用户不存在返回 None
        user = 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.sales
    return 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.mfbz.cn/a/579587.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA实现Springboot项目自动热部署

每当我们在修改代码时&#xff0c;往往需要重新启动项目&#xff0c;这样不仅浪费时间而且很麻烦&#xff0c;我们可以通过IDEA的热部署来提高效率 1、首先点file >> settings >> Build Excution >> Compire&#xff0c;选择Build project auto matically 2.…

linux kernel内存泄漏检测工具之slub debug

一、背景 slub debug 是一个debug集&#xff0c;聚焦于kmem_cache 分配机制的slub内存&#xff08;比如kmalloc&#xff09;&#xff0c;这部分内存在内核中使用最频繁&#xff0c;slub debug其中有相当部分是用来处理内存踩踏&#xff0c;内存use after free 等异常的&#x…

虚良SEO多口子权重蜘蛛池怎么正确使用

一、蜘蛛池的工作原理 蜘蛛池的核心在于通过大量的页面和内容&#xff0c;提高网站的搜索引擎排名&#xff0c;从而获得更多的流量和曝光机会。这种策略通常被用于网站推广和SEO优化。通过将网站链接发布到蜘蛛池中&#xff0c;可以增加网站的曝光率&#xff0c;吸引更多的搜索…

数据结构与算法--稀疏数组

1.引入 比如在编写五子棋时要实现存盘退出和继续上盘的功能。 如果使用二维数组来记录&#xff0c;每行每列&#xff0c;白子对应2&#xff0c;黑子对应1&#xff0c;默认值对应0.然后这里黑子对应二维数组a[1][2]。白子对应二维数组a[2][3]。 如果棋子很少&#xff0c;那么这…

AtCoder Regular Contest 176 C. Max Permutation(计数 分类讨论)

题目 思路来源 乱搞ac 题解 1. 如果有边的权值是1&#xff0c;意味着有两个点的权值都是1&#xff0c;无解 2. 如果一个点i被多个max条件控制&#xff0c;它的值不能超过这些max里最小的那个&#xff0c;记做up[i] 3. 如果同一个权值w对应的边不少于2条&#xff0c;这些边…

Spring Task学习记录

介绍 cron表达式 cron表达式在线生成器 链接: link 入门案例 Component Slf4j public class MyTask {/*** 定时任务 每隔5秒触发1次*/Scheduled(cron "0/5 * * * * ?")public void executeTask(){log.info("定时任务开始执行&#xff1a;{}", new Date…

AtCoder Beginner Contest 173 F - Intervals on Tree(计数 树的性质 贡献)

题目 思路来源 洛谷题解AT_abc173_f Intervals on Tree 题解 - 洛谷专栏 题解 一棵树&#xff0c;考虑加边的过程&#xff0c;加一条边减少一个连通块 那么&#xff0c;逆向这个过程&#xff0c;没删一条边&#xff0c;就多一个连通块 树&#xff1a;点的个数边的个数1 森…

后端端口也可以直接在浏览器访问

比如在浏览器输入http://localhost:8078/hello/helloword访问的是后端的 RestController RequestMapping("/hello") public class HelloWord {RequestMapping("/helloword")public String helloWord(){return "hello word";} }浏览器将会返回

JavaEE——介绍 HTTPServlet 三部分使用与 cookie 和 session 的阐述

文章目录 一、HTTPServlet介绍其中的关键 三个方法 二、HTTPServletRequest(处理请求)1.分块介绍方法作用get 为前缀的方法字段中 含有 getParameter 字段 的方法(前后端交互)&#xff1a;字段中 含有 getHeader 字段 的方法&#xff1a; 2.解释前后端的交互过程3.使用 json 格…

科技感十足特效源码

源码介绍 科技感十足特效源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 源码截图 源码下载 科技感十足特效源码

Python_AI库 Matplotlib的应用简例:绘制与保存折线图

本文默认读者已具备以下技能&#xff1a; 熟悉Python基础语法&#xff0c;以自行阅读python代码块熟悉Vscode或其它编辑工具的应用 在数据可视化领域&#xff0c;Matplotlib无疑是一个强大的工具。它允许我们创建各种静态、动态、交互式的可视化图形&#xff0c;帮助我们更好…

pyaibote--安卓自动化环境配置与基础的使用方法

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 pyaibote介绍 pyaibote是一个全新&#xff0c;强大的办公自动化库。 支持找图&#xff0c;识别像素等操作。 比appium快十倍。 文章介绍 有大佬给我提到这个库后&#xff0c;我来查看。然后发现这个库太新了&am…

Coursera: An Introduction to American Law 学习笔记 Week 04: Constitutional Law

An Introduction to American Law 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors Week 04: Constitutional LawKey Constitutional Law TermsSup…

redission原理笔记

加锁成功的线程&#xff0c;将UUID和线程id和key绑定&#xff0c; 加锁成功后&#xff0c;内部有一个看门狗机制&#xff0c;每隔十秒看下当前线程是否还持有锁&#xff0c;延长生存时间。 没有获取锁的就一直自旋等待&#xff0c;直到超时。 如果redis是主从同步的&#xff0…

Android Studio gradle 默认sourceSets配置

一. AS默认的sourceSets配置 sourceSets在Android插件中如何使用的&#xff1a;android {sourceSets {main {manifest.srcFile AndroidManifest.xmljava.srcDirs [src]resources.srcDirs [src]aidl.srcDirs [src]renderscript.srcDirs [src]res.srcDirs [res]assets.srcD…

Anti Rookit -- 检测隐藏进程

Anti Rookit 一&#xff1a;检测隐藏进程 引言 检测隐藏进程除了众所周知的枚举进程ID之外&#xff0c;还有枚举句柄表的方式。不过今天给大家带来的是第三种方法。 探究 应用层通过接口 C r e a t e P r o c e s s \textcolor{cornflowerblue}{CreateProcess} CreateProcess…

现代信号处理7_最小二乘(CSDN_20240428)

最小二乘法最早由高斯在18世纪提出&#xff0c;几百年以来&#xff0c;这种方法一直被广泛应用。 最小二乘简介 这里是研究最小二乘的起点。随机变量只能存在与理论计算中&#xff0c;我们在工程实践中对随机变量的认识与理论计算中得到的关于随机变量的各种性质相比&#xff…

Penpad 再获 Animoca Brands 投资,全新生态历程

Penpad是Scroll生态的LaunchPad & Yield Aggregator平台&#xff0c;该平台近日在融资上取得了系列进展。据悉&#xff0c;Penpad在前不久率先获得了来自于Gate Labs以及Scroll联合创始人Sandy Peng的融资&#xff0c;并且在近日&#xff0c;其又获得了来自于知名加密投资机…

Coursera: An Introduction to American Law 学习笔记 Week 01: Tort Law

An Introduction to American Law 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors SyllabusWeek 01: Tort LawKey Tort Law TermsTort Law: Part …

2024.阳光能源追光计划暨大陆考察团交流分享会

近日大陆考察团抵达香港&#xff0c;受到了本司热情接待和安排。公司于4月27日下午举办了阳光能源追光计划主题交流会。 会上公司营销部总监张超&#xff0c;分享了阳光能源近几年的能源发展之路及公司新推出的追光计划&#xff0c;得到了大陆考察交流团团长杨国均先生的高度赞…
最新文章