赞
踩
Django带有一个用户认证系统系统,它处理用户用户账号、组、权限以及基于cookie的用户会话。
用户可以直接使用Django自带的用户表。
官方文档:https://docs.djangoproject.com/zh-hans/2.2/topics/auth/
模型类位置 from django.contrib.auth.models import User
字段名 | 含义 |
---|---|
username | 用户名 |
password | 密码 |
邮箱 | |
first_name | 名 |
last_name | 姓 |
is_superuser | 是否管理员账号 |
is_staff | 是否可以访问admin管理界面 |
is_active | 是否是活跃用户,默认为True,一般不删除用户,而是将用户的is_active设为False |
last_login | 上一次登录时间 |
date_joined | 用户创建的时间 |
创建普通用户 create_user:
- from django.contrib.auth.models import User
- user = User.objects.create_user(username='用户名', password='密码', email='邮箱', ...)
创建超级用户 create_superuser:
- from django.contrib.auth.models import User
- user = User.objects.create_superuser(username='用户名', password='密码', email='邮箱', ...)
删除用户:
- from django.contrib.auth.models import User
- try:
- user = User.objects.get(username='用户名')
- user.is_active = False
- user.save()
- print("删除普通用户成功")
- except:
- print("删除普通用户失败")
校验密码:
- # 说明:如果用户名密码校验成功则返回对应的User对象,否则返回None
- from django.contrib.auth import authenticate
- user = authenticate(username=username, password=password)
修改密码:
- from django.contrib.auth.models import User
- try:
- user = User.objects.get(username='用户名')
- user.set_password('123456')
- user.save()
- print("修改密码成功")
- except:
- print("修改密码失败")
登录状态保持:
- from django.contrib.auth import login,authenticate
- def login_view(request):
- user = authenticate(username='用户名', password='密码')
- login(request, user)
登录状态校验:
- from django.contrib.auth.decorators import login_required
- @login_required
- def index_view(request):
- # 该视图必须为用户登录状态下才可以访问
- # 当前登录用户可以通过request.user获取
- login_user = request.user
- ...
用户注销登录:
- from django.contrib.auth import logout
- def logout_view(request):
- logout(request)
代码示例:
创建 templates 目录,放置 html 页面。
编写对应的template页面。
register.html,用户注册页。
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Register</title>
- </head>
- <body>
- <form method="post" action="{% url 'register_page' %}">
- {% csrf_token %}
- {{ form }}
- <input type="submit" value="Submit">
- </form>
- </body>
- </html>
login.html,用户登录页。
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Login</title>
- </head>
- <body>
- <form method="post" action="{% url 'login' %}">
- {% csrf_token %}
- {{ form }}
- <input type="submit" value="Submit">
- </form>
- </body>
- </html>
homepage.html,首页。
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>homepage</title>
- </head>
- <body>
- <form method="post" action="{% url 'logout' %}">
- {% csrf_token %}
- 欢迎访问项目
- <input type="submit" value="注销用户">
- </form>
- </body>
- </html>
编写对应的视图函数。
- from django.shortcuts import render
- from django.contrib.auth.models import User
- from django.http import HttpResponseRedirect, HttpResponse
- from django.contrib.auth import authenticate, login, logout
- from .forms import loginForm, registerForm
- from django.contrib.auth.decorators import login_required
-
- # Create your views here.
- def login_page(request):
- """
- 项目登录面
- :param request:
- :return:
- """
- # return render(request, 'hello.html')
- if request.method == 'POST':
- form = loginForm(request.POST)
- if form.is_valid():
- # 处理表单提交逻辑,可以访问 form.cleaned_data 获取表单字段的值
- username = form.cleaned_data['username']
- password = form.cleaned_data['password']
- if not username or not password:
- return HttpResponse("请输入正确的参数")
- # 校验密码
- user = authenticate(username=username, password=password)
- print('校验用户')
- print(user)
- if not user:
- return HttpResponse("用户名或密码错误")
- else:
- # 记录会话状态
- login(request, user)
- return HttpResponseRedirect('/homepage')
- else:
- form = loginForm()
-
- return render(request, 'login.html', {'form': form})
-
-
- def register_page(request):
- """
- 项目注册页面
- :param request:
- :return:
- """
- # return render(request, 'hello.html')
- if request.method == 'POST':
- form = registerForm(request.POST)
- if form.is_valid():
- # 处理表单提交逻辑,可以访问 form.cleaned_data 获取表单字段的值
- username = form.cleaned_data['username']
- password1 = form.cleaned_data['password1']
- password2 = form.cleaned_data['password2']
- if not username or not password1 or not password2:
- return HttpResponse("请传入正确的参数")
- # 进行注册操作
- try:
- if password1 != password2:
- return HttpResponse("两次输入的密码不一致")
- # 创建用户
- user = User.objects.create_user(username=username, password=password1)
- # 注册成功
- return HttpResponseRedirect('/login')
- except Exception as e:
- # 注册失败
- print(e)
- return HttpResponse("注册用户失败,请联系管理员进行处理")
- else:
- form = registerForm()
-
- return render(request, 'register.html', {'form': form})
-
- def logout_func(request):
- """
- 注销登录
- :param request:
- :return:
- """
- logout(request)
- return HttpResponseRedirect('/login')
编写对应的路由函数。
- from django.urls import path, re_path
- from . import views
- urlpatterns = [
- path("", views.login_page, name='login'),
- path("register/", views.register_page, name='register_page'),
- path("logout/", views.logout_func, name='logout')
- ]
配置项目默认的登录页面。
- # settings.py
- # 配置了登录地址,当访问到需要登录的页面时,如果此时用户未登录,则跳转至登录页面
- LOGIN_URL = '/login'
'运行
页面调用测试。
注册页面输入用户名,密码,确认密码后点击submit进行登录。
成功注册后,跳转至login页面,输入刚才注册的用户名和密码,点击submit进行登录。
登录成功,跳转至项目首页。
再打开一个标签页,注销登录后,项目首页无法访问。
通过建立新表,跟内建表做一对一映射。
继承内建的抽象User模型类。
步骤:
添加新的应用。
定义模型类,集成AbstractUser。
settings.py中指明AUTH_USER_MODEL='应用名.类名'。
注:该操作需要在第一次migrate之前进行,否则会报如下的错误。
代码测试:
添加新的应用。
python3 manage.py startapp useradmin
定义模型类,集成AbstractUser。
- from django.db import models
- from django.contrib.auth.models import AbstractUser
- # Create your models here.
-
- class UserInfo(AbstractUser):
-
- phone = models.CharField(max_length=11, default='')
settings.py中指明AUTH_USER_MODEL='应用名.类名'。
AUTH_USER_MODEL = 'useradmin.UserInfo'
'运行
执行代码迁移。
- python3 manage.py makemigrations
- python3 manage.py migrate
迁移成功后,查看数据库,auth_user表消失,出现了一个useradmin_userinfo的表。
创建新用户测试。
- from django.contrib.auth.models import User
- user = User.objects.create_user(username='euansu', password='euansu', email='euansu@euansu.cn', phone=13000000000)
查看数据库
使用新创建的用户登录刚才的项目,可以正常登录。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。