江门免费建站,营销型网站制作价格,网站策划过程,齐全的赣州网站建设一、Django默认的用户认证系统
Django 自带一个用户验证系统。它负责处理用户账号、组、权限和基于cookie的用户会话。
Django 验证系统处理验证和授权。简单来说#xff0c;验证检验用户是否是他们的用户#xff0c;授权决定已验证用户能做什么。这里的术语验证用于指代这…一、Django默认的用户认证系统
Django 自带一个用户验证系统。它负责处理用户账号、组、权限和基于cookie的用户会话。
Django 验证系统处理验证和授权。简单来说验证检验用户是否是他们的用户授权决定已验证用户能做什么。这里的术语验证用于指代这两个任务。
认证系统由以下部分组成
用户权限二进制是/否标识指定用户是否可以执行特定任务。组将标签和权限应用于多个用户的一般方法。可配置的密码哈希化系统为登录用户或限制内容提供表单和视图工具可插拔的后端系统
Django 里的验证系统旨在通用化不提供一些常见的 web 验证系统的特性。其中一些常见问题的解决方案已在第三方包中实现。
密码强度检查限制登录尝试针对第三方的身份验证例如OAuth对象级权限
二、用户管理User
Django的用户管理通过User模型类处理。
2.1 User模型的字段
username必要的。150 个字符或以下。用户名可包含字母数字、_、、、. 和 - 字符。
first_name可空字段。150 个字符或更少。
last_name可空字段。150 个字符或更少。
email可空字段。电子邮件地址。
password必填字段。一个密码的哈希值和元数据。Django 不存储原始密码。原始密码可以任意长可以包含任何字符。
groups多对多关系到 Group
user_permissions多对多关系到 Permission
is_staff布尔型。指定该用户是否可以访问管理站点。
is_active布尔值。指定该用户账户是否应该被视为活跃账户。我们建议你把这个标志设置为 False而不是删除账户这样如果你的应用程序对用户有任何外键外键就不会被破坏。
is_superuser布尔值。指定该用户拥有所有权限而不用一个个开启权限。
last_login用户最后一次登录的日期时间。
date_joined指定账户创建时间的日期时间。帐户创建时默认设置为当前日期时间。
2.2 User模型的属性
is_authenticated只读属性始终返回 True 匿名用 护AnonymousUser.is_authenticated 始终返回 False 可通过该方法确认用户是否为用户列表中的用户。
is_anonymous只读属性总是 False。这是区分 User 和 AnonymousUser 对象的一种方式。一般来说你应该优先使用 is_authenticated 来代替这个属性。
三、User基本操作
需要引入User模块
from django.contrib.auth.models import User
3.1 查询所有用户 # 获取所有用户users User.objects.all()response.append(fAll User : {users.count()})for user in users:response.append(f-- {user.get_username()}) 3.2 添加新用户 user1 User.objects.create_user(usernameUser3,password123456)user1.save()response.append(fNew User : {user1.get_username()})user2 User.objects.create_user(usernameUser4,password123456)response.append(fNew User : {user2.get_username()}) 3.3 修改用户信息 user User.objects.get(username User1)response.append(fOld UserName : {user.get_username()})user.username New Useruser.save()user User.objects.get(username New User)response.append(fNew UserName : {user.get_username()}) 3.4 修改密码 user User.objects.get(username User3)response.append(fOld Password : {user.password})user.set_password(888888)user.save()user User.objects.get(username User3)response.append(fNew Password : {user.password})
3.5 用户验证
使用 authenticate() 来验证用户使用时需要引入函数。它使用 username 和 password 作为参数来验证对每个身份验证后端( authentication backend )进行检查。如果后端验证有效则返回一个 :class:~django.contrib.auth.models.User 对象。如果后端引发 PermissionDenied 错误将返回 None。
from django.contrib.auth import authenticateuser authenticate(username New User, password 123456)
if user is not None:response.append(fUser is exist : {user.get_username()})
else:response.append(fUser is not exist.) 四、权限管理
4.1 创建权限
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from serverapp.models import Persondef CreatePermission(request:HttpRequest, new_permission:str):Create perssioncontent_type ContentType.objects.get_for_model(Person)permission, result Permission.objects.get_or_create(codename new_permission,name fCan {new_permission},content_type content_type,)return HttpResponse({0}.format(permission))权限可以在权限表中查看到 4.2 用户权限管理 使用User对象的groups 和 user_permissions进行权限设置。
myuser.groups.set([group_list])
myuser.groups.add(group, group, ...)
myuser.groups.remove(group, group, ...)
myuser.groups.clear()
myuser.user_permissions.set([permission_list])
myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, permission, ...)
myuser.user_permissions.clear() 4.3 用户登录
from django.contrib.auth import logindef login_user(request:HttpRequest,pk:int):Create perssionlogin_user User.objects.get(pkpk)login(request, login_user)return HttpResponse(The user {0} login..format(login_user.get_username())) 4.4 用户登出
from django.contrib.auth import logoutdef logout_user(request:HttpRequest):Create perssionlogout(request)return HttpResponse(The user {0} logout..format(request.user.get_username())) 4.5 限制未登录用户的访问 4.5.1 检查request.user.is_authenticated 状态
def login_confirm_raw(request:HttpRequest):Create perssionif not request.user.is_authenticated:return HttpResponse(The user {0} doesnt login..format(request.user.get_username()))else:return HttpResponse(The user {0} has login..format(request.user.get_username()))
未登录时 登陆用户 重新确认用户是否登录 4.5.2 使用login_required 装饰器
from django.contrib.auth.decorators import login_required login_required
def login_confirm(request:HttpRequest):Create perssionif not request.user.is_authenticated:return HttpResponse(The user {0} doesnt login..format(request.user.get_username()))else:return HttpResponse(The user {0} has login..format(request.user.get_username())) 4.6 限制已登录的用户
除了直接对用户信息进行判定外亦可以使用user_passes_test 装饰器进行判定。
from django.contrib.auth.decorators import user_passes_testdef username_check(user:User):Check usernamereturn user.username.startswith(User)user_passes_test(username_check)
def check(request:HttpRequest):check userreturn HttpResponse(The username {0} is right..format(request.user.get_username())) user_passes_test() 接受一个必要的参数一个带有:class:~django.contrib.auth.models.User 对象的调用如果允许用户访问这个页面则返回 True 。注意user_passes_test() 不会自动检查用户是否匿名。
user_passes_test() 可以传递两个可选参数
login_url
允许你指定用户没有通过测试时跳转的地址。它可能是一个登录页面如果你没指定默认是 settings.LOGIN_URL 。
redirect_field_name
与 login_required() 相同。如果你想把没通过检查的用户重定向到没有 next page 的非登录页面时把它设置为 None 这样它会在 URL 中移除。 4.7 权限访问装饰器permission_required
使用permission_required装饰器可以快捷的确认用户是否有特定的权限。
from django.contrib.auth.decorators import permission_requiredpermission_required(serverapp.add_person)
def check_permission(request:HttpRequest):Check user permissionreturn HttpResponse(The user {0} has permission..format(request.user.get_username()))有权限时 无权限时