Django - 认证系统_常用命令

需要用到的模块:

from django.contrib.auth.models import User                 # 导入User对象
from django.contrib import auth                             # 导入auth模块
from django.contrib.auth import authenticate,login,logou    # 验证用户名,登录,注销
from django.contrib.auth.decorators import login_required   # 验证用户是否登录的装饰器,直接@到需要验证的函数上

 

User表介绍

其中User为django框架为我们提供用于存储登录用户和密码等信息的用户表,在我们使用此django认证系统时,必须使用此表,不可以另外创建用户表,且表中的内容不可以直接在表中添加,因为其存储密码为加密的的字符串。其中username和password字段是必须存入内容的字段。User表格添加数据两种方式如下:

方式一:

    通过如下命令添加超级用户信息:python manage.py createsuperuser,然后按照步骤设置用户信息,其中username和password字段是必须存入内容的字段。

方式二:

    通过create_user()或者create_superuser()(与上述创建超级用户效果一样)方法添加用户信息,如下注册用户函数的应用实例:

 

def register(request):
    if request.method=="POST":
        username=request.POST.get("username")
        pswd=request.POST.get("userpswd1")
        repwd=request.POST.get("repwd")
        if userpswd1==repwd:
            User.objects.create_user(username=username,password=repwd)      #username和password为User表的关键字段
            return redirect("/login/")

 

author模块方法:

authenticate()

    提供了用户认证,即验证用户名以及密码是否正确,一般需要 username  password 两个关键字参数,如果认证信息有效,会返回一个  user  对象。具体使用见如下登录函数实例:

def login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        userpswd = request.POST.get("userpswd")
        user = auth.authenticate( username=username, password=userpswd )
        if user:
            auth.login(request,user)                # 相当于request.session["user"]=user.username
            return redirect("/booklist/")
    return render(request,"login.html")

login(HttpRequest, user)

    该函数接受一个HttpRequest对象,以及一个认证了的user对象,此函数使用django的session框架给某个已认证的用户附加上session id等信息。即上述登录实例中设置session用法。

from django.contrib.auth import authenticate, login
   
def my_view(request):
  username = request.POST['username']
  password = request.POST['password']
  user = authenticate(username=username, password=password)
  if user is not None:
    login(request, user)
    # Redirect to a success page.
    ...
  else:
    # Return an 'invalid login' error message.
    ...           

logout(request)

    该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。如下注销当前登录用户的session实例:

def login_out(request):
    auth.logout(request)                            # 清除当前登录用户的session,相当于request.session.flush()
    return redirect("/login/")

User对象方法

is_authenticated()

    返回值为bool值,主要用于判断user对象是否完成登录验证,如用在要求用户登录以后才能访问某些网址,否则跳转到登录页面完成登录。见如下页面函数访问前的验证实例:

方法一

def booklist(request):
    user=request.user                                     #显示当前登录用户对象
    if not user.is_authenticated():
        return redirect("/login/")
    book_obj=Book.objects.all()
    return render(request,"booklist.html",{"book_obj":book_obj})

方法二
django已经为我们设计好了一个用于此种情况的装饰器:login_requierd()

from django.contrib.auth.decorators import login_required
      
@login_required
def my_view(request):
  ...

check_password(passwd)

  用户需要修改密码的时候 首先要让他输入原来的密码 ,如果给定的字符串通过了密码检查,返回 True

set_password()

    使用 set_password() 来修改密码,见如下修改密码函数实例:

def modify(request):
    if request.method=="POST":
        username=request.POST.get("username")
        pre_userpswd=request.POST.get("pre_userpswd")    # 获取原密码
        new_userpswd=request.POST.get("new_userpswd")    # 获取新密码
        # user=auth.authenticate(username=username,password=pre_userpswd)
# if user:
if check_password (pre_userpswd):
user.set_password(new_userpswd) user.save() return redirect("/login/")

Django常用命令

        在django框架中常用的命令总结如下,注以下命令是在终端执行:

# 查看django版本
python -m django --version

# 创建项目,名为mysite
django-admin startproject mysite

# Django项目环境终端
python manage.py shell

# 创建应用程序,确保和 manage.py 是同一目录
python manage.py startapp app01

# 启动django
python manage.py runserver
python manage.py runserver 8080
python manage.py runserver 0.0.0.0:8000

# 数据库迁移
python manage.py makemigrations

python manage.py migrate

# 同步数据库
python manage.py syncdb

# 清空数据库(保留空表)
python manage.py flush

# 认证User表创建超级用户
python manage.py createsuperuser

# 修改用户密码
python manage.py changepassword username

 

posted @ 2018-02-06 21:48  焦国峰的随笔日记  阅读(137)  评论(0)    收藏  举报
// ############################### // ##############################