Django 项目6:表单与认证系统

发布于:2025-09-08 ⋅ 阅读:(10) ⋅ 点赞:(0)

目录

1、form 表单

2、session 保存状态

3、Admin 后台

4、Auth 系统


1、form 表单

(1)创建 form.py 文件,并完善

from django import forms

# 定义一个表单类
class Register(forms.Form):
    user = forms.CharField(max_length=30, label='用户名')
    pw = forms.CharField(label='密码', min_length=6, max_length=8,
                         widget=forms.PasswordInput(attrs={'placeholder': '请输入你的密码:'}),
                         error_messages={'min_length': '密码小于6位', 'max_length': '密码大于8位'}
                         )
    repw = forms.CharField(label='请再次输入密码', widget=forms.PasswordInput())
    phone = forms.RegexField(regex='^1\d{10}$', label='手机号',
                             error_messages={'invalid': '收入的手机号格式不对'})
    email = forms.EmailField(label='电子邮箱')

2、session 保存状态

(1)状态保存

  • http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
  • 客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
  • 存储方式包括cookie、session,会话一般指session对象
  • 使用cookie,所有数据存储在客户端,注意不要存储敏感信息
  • 使用session方式,所有数据存储在服务器端,在客户端cookie中存储session_id
  • 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据

       注意:不同的请求者之间不会共享这个数据,与请求者一一对应

(2)创建 session 状态

# user和pw是session的键,u和p是变量名
request.session['user'] = u
request.session['pw'] = p

(3)查找 session 状态

# 第一个是需要查找的键,第二个是没找到键时返回空的值
user = request.session.get('user', '')
user = request.session.get('pw', None)
# 获取键
keys = request.session.keys()
# 获取值
values = request.session.values()
# 获取session_key
session_key = request.session.session_key

(4)删除 session 状态

del user  # 删除对应键值对的值
request.session.clear()  # 删除数据,但是会记录保持
request.session.flush()    # 直接清空

(5)setting 中设置会话(session)管理参数

# 是否关闭浏览器就关闭session
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
# 是否每次请求都报错session
SESSION_SAVE_EVERY_REQUEST = False
# 设置cookie及session的失效时间,默认位两周,单位为秒
SESSION_COOKIE_AGE = 1209600

3、Admin 后台

(1)注册 admin ,在 manage.py 中执行下面代码设置 Admin 后台的用户名和密码

createsuperuser

(2)在 App 的 admin.py 中注册模板

from django.contrib import admin

# Register your models here.

from demo1.models import User

# 注册模版方法1
# admin.site.register(User)

# 注册模版方法2
# @admin.register(User)  # 启动方法1

class Useradmin(admin.ModelAdmin):
    # 设置展示字段
    list_display = ['id', 'user', 'pw']
    # 使用 user 来跳转到修改界面
    list_display_links = ['user']

admin.site.register(User, Useradmin)  # 启动方式2

4、Auth 系统

(1)介绍

  • User:User是auth模块中维护用户信息的关系模式(继承了models.Model),数据库中该表被命名为auth_user。
  • Group:User对象中有一个名为groups的多对多字段,多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户。
  • Permission:Django的auth系统提供了模型级的权限控制,即可以检查用户是否对某个数据表拥有增(add), 改(change), 删(delete)权限。

(2)功能

  • create_user 创建用户
  • authenticate 验证登录
  • login 记住用户的登录状态
  • logout 退出登录
  • is_authenticated 判断用户是否登录
  • login_required 判断用户是否登录的装饰器

       login_required的使用:

# 第一种跳转路由的方式
@login_required(login_url='需要跳转的路由')

# 第二种跳转路由的方式(在steeing最后添加以下代码)
LOGIN_URL = '需要跳转的路由'

    (3)例子(创建登录的视图函数)

    def cl_login(request):
        if request.method == 'POST':
            u = request.POST.get('user')
            p = request.POST.get('pw')
            print(u, p)
            if User.objects.filter(username=u):
                print(User.objects.all())
                user = authenticate(username=u, password=p)
                # 用户是否存在
                if user:
                    # 判断账号是否激活
                    if user.is_active:
                        # 将用户对象添加到当前会话(session)中
                        login(request, user)
                        # return HttpResponse('登录成功')
                        return redirect(reverse('demo1:index'))
                    else:
                        return HttpResponse('用户未激活')
                else:
                    return HttpResponse('用户密码或者用户名不正确')
        return render(request, 'demo1/demo3.html')

    网站公告

    今日签到

    点亮在社区的每一天
    去签到