2022年 11月 4日

python 认证系统

新建用户

user = User.objects.create_user(username, email, password)
user.save()
# 不存储用户密码明文而是存储一个Hash值
  • 1
  • 2
  • 3

登录验证

from django.contrib.auth import authenticate

user = authenticate(username=username, password=password)

# 认证用户的密码是否有效, 若有效则返回代表该用户的user对象, 若无效则返回None.
# 该方法不检查is_active标志位.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

登录状态

from django.contrib.auth import login,authenticate
user = authenticate(username=username, password=password)
if user is not None:
    if user.is_active:
        login(request, user)
        #此时用户被设置为登录状态
# login向session中添加SESSION_KEY, 便于对用户进行跟踪:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

退出登录

from django.contrib.auth import logout
def logout_view(request):
    logout(request)
# logout会移除request中的user信息, 并刷新session
  • 1
  • 2
  • 3
  • 4

只允许登录的用户访问
@login_required修饰器修饰的view函数会先通过session key检查是否登录, 已登录用户可以正常的执行操作, 未登录用户将被重定向到login_url指定的位置.

若未指定login_url参数, 则重定向到settings.LOGIN_URL

from django.contrib.auth.decorators import login_required

@login_required(login_url='/accounts/login/')
def userinfo(request):
    ...

# settings 配置
LOGIN_URL = '/index/'
# views
@login_required
def userinfo(request):
    ...


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15