django,auth認證(注冊,登錄,修改密碼)


auth是django提供的權限管理系統,可以提供用戶身份認證,用戶組合權限管理。

登錄認證:

登錄的視圖函數:

def login_auth(request):
    if request.method == "GET":
        return render(request, "login.html", context={"new_time": new_time})
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        print("用戶名:{},密碼:{}".format(username, password))
        #  todo user認證成功返回對象,認證失敗返回空
        user = authenticate(username=username,
                            password=password)
        if user:
            if user.is_active:  # 判斷用戶是否有效
                login(request, user=user)  # 登錄
                request.session["user"] = username  # 加session
                request.session.set_expiry(None)  # 設置session有效期:0為關閉瀏覽器馬上失效,none為永久
                result = {"code": 0,
                          "msg": "login success!",
                          "data": {"username": username,
                                   "password": password,
                                   }
                          }
                # return JsonResponse(result)
                return HttpResponseRedirect("/info/")
        else:
            # return redirect('/login')
            return render(request, "login.html", context={"msg": "用戶名或密碼錯誤"})

登錄的html:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>登陸接口</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<h3 align="center">登錄頁面</h3>
<p align="center">{{ new_time }}</p>
<form action="" method="post">
       <table  align="center">
          <tr>
             <td>用戶名</td>

             <td>
                <input type="text" name="username" />
            </td>
          </tr>
          <tr>
             <td>密碼</td>
             <td>
                <input type="text" name="password"/>
            </td>
           <p style="color: red" align="center">
                {{msg}}
          </p>
          <tr>
             <td>
                <input type="submit" value="登錄">
             </td>

          </tr>
        </table>
</form>
</body>
</html>

顯示效果:

注冊認證:

注冊的視圖函數:

def register(request):
    if request.method == "GET":
        return render(request, "register.html", context={"new_time": new_time})
    if request.method == "POST":
        register_name = request.POST.get("registername")
        register_pwd = request.POST.get("registerpwd")
        print("獲取到用戶輸入的用戶名是:{}密碼是:{}".format(register_name, register_pwd))
        # 通過用戶名判斷查詢賬號是否已經注冊
        user_list = User.objects.filter(username=register_name)
        if user_list:
            data = {
                "msg": "account already exists!"
            }
            return render(request, "register.html", context=data)
        elif len(register_pwd) < 6:
            return render(request, "register.html", context={"msg": "密碼長度必須大於等於6位"})

        elif register_name.strip() != '' and register_pwd.strip() != '':
            user = User.objects.create_user(username=register_name, password=register_pwd)
            regist_result = {
                "code": 0,
                "msg": "register success!",
                "data": {
                    "register_name": register_name,
                    "register_pwd": register_pwd,
                }
            }
            user.save()
            return JsonResponse(regist_result)
        else:
            data = {"msg": "not null!"}
            return render(request, "register.html", context=data)

注冊的html:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>注冊接口</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<h3 align="center">注冊頁面</h3>
<p align="center">{{ new_time }}</p>
<form action="" method="post">
       <table  align="center">
          <tr>
             <td>請輸入用戶名</td>
             <td>
                <input type="text" name="registername" />
            </td>
          </tr>
          <tr>
             <td>請輸入密碼</td>
             <td>
                <input type="text" name="registerpwd"/>
            </td>
          </tr>
          <p style="color: red" align="center">
                {{msg}}
          </p>
          <tr>
             <td>
                <input type="submit" value="注冊">
             </td>
          </tr>
        </table>
</form>
</body>
</html>

顯示效果:

修改密碼:

修改密碼的視圖函數:

@login_required
def updata_pwd(request):
if request.method == "GET":
return render(request, "updata.html", context={"new_time": new_time})
if request.method == "POST":
# username = request.POST.get("username")
password = request.POST.get("password")
new_password = request.POST.get("new_password")
username = request.user.username # 獲取當前登錄用戶的用戶名
user = authenticate(username=username,
password=password)

print("當前用戶登錄名是:{}".format(username))

if not user:
# todo 如果用戶沒在user中,證明登錄失敗,修改密碼先判斷登錄成功,再去修改密碼
return render(request, "updata.html", context={"msg": "原密碼錯誤,請重新輸入"})
else:
user.set_password(new_password) # 重置密碼
user.save() # todo 一定要保存才會生效
return render(request, "updata.html", context={"msg": "密碼修改成功"})

修改密碼的html:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>注冊接口</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<h3 align="center">注冊頁面</h3>
<p align="center">{{ new_time }}</p>
<form action="" method="post">
       <table  align="center">
          <tr>
             <td>請輸入用戶名</td>
             <td>
                <input type="text" name="registername" />
            </td>
          </tr>
          <tr>
             <td>請輸入密碼</td>
             <td>
                <input type="text" name="registerpwd"/>
            </td>
          </tr>
          <p style="color: red" align="center">
                {{msg}}
          </p>
          <tr>
             <td>
                <input type="submit" value="注冊">
             </td>
          </tr>
        </table>
</form>
</body>
</html>

 全部視圖代碼:

from django.shortcuts import render, redirect
from django.http import HttpResponse, JsonResponse, HttpResponseRedirect
from Hello_Api.models import Register
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
import datetime

# Create your views here.

new_time = datetime.datetime.now()


@login_required
def personinfo(request):
    context = {
        "blog_name": "圓覺",
        "username": "",
        "age": 23,
        "fancy": ["python", "django", "requests"],
        "blog": {"url": "https://www.cnblogs.com/xiamaojjie/",
                 "img": "https://pic.cnblogs.com/avatar/1772245/20191102152106.png",
                 }

    }

    class Myblog():

        def __init__(self):
            self.guangzhu = 3
            self.fensi = 8

        def guangzhu(self):
            return self.guangzhu

        def fensi(self):
            return self.fensi

    myblog = Myblog()  # TODO 實例化對象

    context["myblog"] = myblog  # TODO 把對象添加到字典里面,通過類名.取值

    return render(request, "personinfo.html", context)


def register(request):
    if request.method == "GET":
        return render(request, "register.html", context={"new_time": new_time})
    if request.method == "POST":
        register_name = request.POST.get("registername")
        register_pwd = request.POST.get("registerpwd")
        print("獲取到用戶輸入的用戶名是:{}密碼是:{}".format(register_name, register_pwd))
        # 通過用戶名判斷查詢賬號是否已經注冊
        user_list = User.objects.filter(username=register_name)
        if user_list:
            data = {
                "msg": "account already exists!"
            }
            return render(request, "register.html", context=data)
        elif len(register_pwd) < 6:
            return render(request, "register.html", context={"msg": "密碼長度必須大於等於6位"})

        elif register_name.strip() != '' and register_pwd.strip() != '':
            user = User.objects.create_user(username=register_name, password=register_pwd)
            regist_result = {
                "code": 0,
                "msg": "register success!",
                "data": {
                    "register_name": register_name,
                    "register_pwd": register_pwd,
                }
            }
            user.save()
            return JsonResponse(regist_result)
        else:
            data = {"msg": "not null!"}
            return render(request, "register.html", context=data)


def login_auth(request):
    if request.method == "GET":
        return render(request, "login.html", context={"new_time": new_time})
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        print("用戶名:{},密碼:{}".format(username, password))
        #  todo user認證成功返回對象,認證失敗返回空
        user = authenticate(username=username,
                            password=password)
        if user:
            if user.is_active:  # 判斷用戶是否有效
                login(request, user=user)  # 登錄
                request.session["user"] = username  # 加session
                request.session.set_expiry(None)  # 設置session有效期:0為關閉瀏覽器馬上失效,none為永久
                result = {"code": 0,
                          "msg": "login success!",
                          "data": {"username": username,
                                   "password": password,
                                   }
                          }
                # return JsonResponse(result)
                return HttpResponseRedirect("/info/")
        else:
            # return redirect('/login')
            return render(request, "login.html", context={"msg": "用戶名或密碼錯誤"})


@login_required
def updata_pwd(request):
    if request.method == "GET":
        return render(request, "updata.html", context={"new_time": new_time})
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        new_password = request.POST.get("new_password")
        user = authenticate(username=username,
                            password=password)
        if not user:
            # todo 如果用戶沒在user中,證明登錄失敗,修改密碼先判斷登錄成功,再去修改密碼
            return render(request, "updata.html", context={"msg": "原密碼錯誤,請重新輸入"})
        else:
            user.set_password(new_password)  # 重置密碼
            user.save()  # todo 一定要保存才會生效
            return render(request, "updata.html", context={"msg": "密碼修改成功"})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM