Django的用户认证组件

用户认证:

  auth模块:

from django.contrib import auth

  1.1 authenticate()

  提供了用户认证,如果认证信息有效,会返回一个User对象。

user = auth.authenticate(username=user,password = pwd) # 用户验证:成功则返回user对象,否则返回None

  1.2 login(request,user):

  该函数接收一个HttpRequest对象,以及一个认证了的user对象,此函数使用django的session框架给某个已认证的用户附加上sessionid 等信息。

from django.contrib import auth
def login(request):
    if request.method == "POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        user = auth.authenticate(username=user,password = pwd) # 用户验证:成功则返回user对象,否则返回None
        if user:
            auth.login(request,user) # 这一步相当于登陆成功后,注册session,
            return redirect("/index/")
    return render(request,"login.html")

  1.3 logout(request) 注销用户

def logout(request):
    auth.logout(request)  # 注销 
    return redirect("/login/")

  该函数接收一个HttpRequest对象,无返回值,当调该函数时,当前请求的session信息会全部清除,该用户即使没有登陆,使用该函数也不会报错。

User对象:

  User对象属性:username,password(必填项),password用哈希算法保存到数据库。

2.1 User对象的 is_authenticated: 

  如果是真正的 User 对象,返回值恒为 True 。 用于检查用户是否已经通过了认证。
  通过认证并不意味着用户拥有任何权限,甚至也不检查该用户是否处于激活状态,这只是表明用户成功的通过了认证。 这个方法很重要, 在后台用request.user.is_authenticated判断用户是否已经登录,如果true则可以向前台展示request.user.name

要求:

1  用户登陆后才能访问某些页面,

2  如果用户没有登录就访问该页面的话直接跳到登录页面

3  用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址

注意:

  在django1.1以后,is_authenticated 由方法(即 is_authenticated) 变成了静态方法即(is_authenticate) 就可以调用了。

def index(request):
    print(request.user.id)
    print(request.user.username)
    if not request.user.is_authenticated:
        return redirect("/login/")
    return render(request,"index.html")

2.2,创建用户: 

def register(request):
    User.objects.create_user(username="egon",password=123)
    User.objects.create_superuser(username='yuan',password=123)
    # create_user 创建普通用户
    # create_superuser 创建超级用户
    return redirect("/login/")

猜你喜欢

转载自www.cnblogs.com/stfei/p/9285943.html