Django的认证系统

auth模板

from django.contrib import auth

auth中提供了许多实用方法:

authenticate()

提供了用户认证功能,即认证用户以及密码是否正确,一般需要username、password两个关键字参数。

如果认证成功(用户名和密码正确有效),便会返回一个User对象。

authenticate()会在该User对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

用法:

from django.contrib import auth
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        obj = auth.authenticate(request,username=username,password=password)
        if obj:
            #记录登录状态
            auth.login(request,obj)
            #取到跳转后的url,赋值给next
            next = request.GET.get('next')
            #判断next是否取到值
            if next:
                return redirect(next)
            return redirect('/index/')
    #返回登录页面
    return render(request,'login.html')

logout

该函数接收一个HttpRequest对象,无返回值.

当调用该函数时,当前请求的session信息会全部清除.该用户即使没有登录,使用该函数也不会报错.

用法:

from django.contrib.auth import logout
   
def logout_view(request):
  logout(request)
  # Redirect to a success page.

is_authenticated()

用来判断当前请求是否通过了认证.

用法:

 

def my_view(request):
  if not request.user.is_authenticated():
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

 

login_requierd()

auth给我们提供的一个装饰器工具,用来快捷的给某个视图添加登录校验.

用法;

from django.contrib.decorators import login_required

@login_required
def my_view(request)
    ...

若用户没有登录,则会跳转到django默认的登录URL'/accounts/login/'并传递当前访问url的绝对路径(登录成功后,会重定向到该路径).

如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改.

示列:

LOGIN_URL = '/login/'  # 这里配置成你项目登录页面的路由

create_user()

auth提供的一个创建新用户的方法,需要提供必要参数(username、password)等。

用户:

 

from django.contrib.auth.models import User
user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)

 

create_superuser()

auth提供的一个创建新的超级用户的方法,需要提供必要参数(username、ppasswoed)等。

用法:

from django.contrib.auth.models import User
user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)

check_password(password)

auth提供的一个检查密码是否正确的方法,需要提供当前用户的密码。

密码正确返回True,否则返回False。

用法:

ok = user.check_password('密码')

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/xiaole-7890/p/9812908.html