Django——Auth模块以及admin站点

简介: 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

相关文章
|
5月前
|
存储 NoSQL 中间件
【Django+Vue3 线上教育平台项目实战】登录功能模块之短信登录与钉钉三方登录
在当今的数字化时代,用户认证是任何在线服务安全性的基石。本文将简明扼要地介绍登录注册流程中的核心概念:HTTP无状态性、Session、Token与JWT,并详细阐述两种实用登录方式—— 手机号登录验证(借助容联云/云通讯服务) 与钉钉第三方登录。我们将探讨这些概念的基本原理,并深入解析两种登录方式的实现流程,旨在帮助开发者提升用户认证的安全性与便捷性。
【Django+Vue3 线上教育平台项目实战】登录功能模块之短信登录与钉钉三方登录
|
4月前
|
前端开发 数据库 数据安全/隐私保护
Django入门到放弃之Auth模块
Django入门到放弃之Auth模块
|
5月前
|
JavaScript 前端开发 API
【Django+Vue3 线上教育平台项目实战】构建高效线上教育平台之首页模块
在当今数字化教育浪潮中,构建一个高效且用户友好的线上教育平台至关重要。本博客将指导您使用**Django**作为后端框架,结合**Vue 3**的强大前端能力,快速搭建**平台首页的核心功能**,包括***导航栏、轮播图、侧边栏、标签栏及分类课程推荐***。我们将探讨前后端数据交互、Vue组件化开发等关键技术,轻松构建出既美观又实用的线上教育平台。
【Django+Vue3 线上教育平台项目实战】构建高效线上教育平台之首页模块
|
7月前
|
Python
PyCharm Community Edition 2023.3.1安装django模块
PyCharm Community Edition 2023.3.1安装django模块
|
7月前
|
Python
百度搜索:蓝易云【Django自带的Admin后台中如何获取当前登录用户】
在上面的代码中,`@staff_member_required`装饰器确保只有管理员可以访问 `my_custom_view`视图,而 `@login_required`装饰器确保只有登录的用户可以访问该视图。然后,可以使用 `request.user.username`获取当前登录用户的用户名,并将其传递到模板中进行显示或其他操作。
61 3
|
7月前
|
人工智能 开发工具 数据库
Django实践-03模型-02基于admin管理表
Django实践-03模型-02基于admin管理表
Django实践-03模型-02基于admin管理表
|
Python
django auth模块使用jwt进行登录不能更新last_login!
今天使用django自带的用户系统,进行jwt,重写了user模型,使用手机登录,于是就想用django自带的登录验证... 哎,一切折腾都在于不熟悉
66 0
|
XML 关系型数据库 MySQL
【Django】当大型项目采用Django框架对于QueryDict以及模板的表单在Admin 管理工具的使用
【Django】当大型项目采用Django框架对于QueryDict以及模板的表单在Admin 管理工具的使用
169 0
【Django】当大型项目采用Django框架对于QueryDict以及模板的表单在Admin 管理工具的使用
|
Python 前端开发 数据安全/隐私保护
Django Admin 管理工具
Django Admin 管理工具
1575 0
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
173 45