国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

django實(shí)現(xiàn)登錄和登錄的鑒權(quán)

這篇具有很好參考價(jià)值的文章主要介紹了django實(shí)現(xiàn)登錄和登錄的鑒權(quán)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1、創(chuàng)建數(shù)據(jù)庫(kù)的管理員表

在models.py 中定義admin表,為了簡(jiǎn)單,表里只有用戶名和密碼還有默認(rèn)加的id 三個(gè)字段

from django.db import models

# Create your models here.

class Admin(models.Model):
    username = models.CharField(verbose_name="用戶名",max_length=16)
    passwd = models.CharField(verbose_name="密碼",max_length=64)

執(zhí)行創(chuàng)建表的語(yǔ)句

py -3 manage.py makemigrations
py -3 manage.py migrate

然后自己手動(dòng)插入一些用戶

2、登錄界面和登錄視圖

在urls.py中加入路徑

from django.urls import path
from app01.views import user,depart,pretty,admin,account

urlpatterns = [
    #path('admin/', admin.site.urls),
    path('depart/list/', depart.depart_list),
    path('depart/add/', depart.depart_add),
    path('depart/delete/', depart.depart_delete),
    #http://127.0.0.1:8000/depart/2/edit/
    path('depart/<int:nid>/edit/', depart.depart_edit),

    path('user/list/', user.user_list),
    path('user/add/', user.user_add),
    path('user/<int:nid>/edit/', user.user_edit),
    path('user/<int:nid>/delete/', user.user_delete),

    path('pretty/list/', pretty.pretty_list),
    path('pretty/add/', pretty.pretty_add),
    path('pretty/<int:nid>/edit/', pretty.pretty_edit),
    path('pretty/<int:nid>/delete/', pretty.pretty_delete),

    path('admin/add/', admin.admin_add),
    path('admin/list/', admin.admin_list),
    path('admin/<int:nid>/edit/',admin.admin_edit),

    path('login/account/',account.login),      #這個(gè)是登錄的
]

在寫登錄的視圖函數(shù)account.py
我把不同模塊的視圖函數(shù)拆分了,不同功能模塊的一個(gè)py文件,在app01目錄下創(chuàng)建目錄views, 在views目錄下分類寫視圖函數(shù),主要要把原始的views.py文件刪除
登錄使用的Form組件
獲取到用戶輸入的數(shù)據(jù)后要對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),根數(shù)據(jù)庫(kù)里面的值
再有如果驗(yàn)證通過(guò)要request.session 通過(guò)這個(gè)生成session, django會(huì)自動(dòng)處理,生成一個(gè)session保存到數(shù)據(jù)庫(kù),并把這個(gè)session返回給瀏覽器。

from django.shortcuts import render,redirect
from django import forms
from app01.utils.encrypt import md5
from app01 import models


class LoginForm(forms.Form):
    username = forms.CharField(
        label="用戶名",
        widget=forms.TextInput,
        required=True,
    )
    passwd = forms.CharField(
        label="密碼",
        widget=forms.PasswordInput(render_value=True),
        required=True
    )
    # 這個(gè)init方式是給自己加樣式的
    def __init__(self, *args,**kwargs):
        super().__init__(*args,**kwargs)

        for name ,field in self.fields.items():
            #字段中有屬性,保留原來(lái)的屬性,沒有屬性,才增加
            if field.widget.attrs:
                field.widget.attrs["class"] = "form-control"
                field.widget.attrs["placeholder"] = field.label
            else:
                field.widget.attrs = {"class":"form-control"}


def login(request):
    """用戶登錄"""
    if request.method == 'GET':
        form = LoginForm()
        return render(request,'login.html',{'form':form})

    form = LoginForm(data=request.POST)
    if form.is_valid():
        #print(form.cleaned_data)   #獲取到的值是一個(gè)字典{'username': 'root', 'passwd': '1234'}
        #校驗(yàn)數(shù)據(jù)庫(kù)的用戶名和密碼
        admin_object = models.Admin.objects.filter(**form.cleaned_data).first()
        if not admin_object:
            form.add_error('passwd','用戶名或密碼錯(cuò)誤')
            return render(request,'login.html',{'form':form})
        #用戶名和密碼正確
        #網(wǎng)站生成隨機(jī)字符串; 寫到用戶瀏覽器的cookie中,再寫入到session中
        request.session['info'] = {'id':admin_object.id,'name':admin_object.username}
        return redirect('/admin/list/')
    return render(request,'login.html',{'form':form})

login.html 的內(nèi)容

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css' %}">
    <style>
        .account {
            width: 400px;
            border-radius: 5px;
            border: 1px solid #dddddd;
            box-shadow: 5px 5px 20px #aaa;

            margin-left: auto;
            margin-right: auto;
            margin-top: 100px;
            padding: 20px 40px;
        }
        .account h2 {
            margin-top: 10px;
            text-align: center;
        }
    </style>
</head>
<body>
<div class="account">
    <h2>用戶登錄</h2>
      <form  method="post" novalidate>
          {% csrf_token %}
                    {% for field in form %}
                      <div class="form-group">
                        <label >{{ field.label }}</label>
                        {{ field }}
                      <span style="color:red">{{ field.errors.0 }}</span>
                      </div>
          {% endfor %}
          <button type="submit" class="btn btn-primary">提交</button>
      </form>

</div>

<script src="{% static 'js/jquery-3.7.0.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>
</body>
</html>

3、中間件實(shí)現(xiàn)登錄鑒權(quán)

在開始我們寫了一個(gè)功能后,把django項(xiàng)目運(yùn)行起來(lái),直接方法url就能訪問(wèn)到了,正常來(lái)說(shuō)是只有登錄后的用戶才能訪問(wèn)到,django中給我們提供了中間件,可以通過(guò)中間件來(lái)實(shí)現(xiàn)鑒權(quán)

django實(shí)現(xiàn)登錄和登錄的鑒權(quán),python,django,sqlite,數(shù)據(jù)庫(kù)
在django 中可以定義多個(gè)中間件,中間件就是一個(gè)類,類里面定義有兩個(gè)函數(shù)一個(gè)是process_request進(jìn)入的,穿過(guò)所有的中間件到達(dá)視圖函數(shù),視圖函數(shù)返回結(jié)果通過(guò)process_response函數(shù)返回給瀏覽器

  • 定義中間件
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import redirect

class AuthMiddleWare(MiddlewareMixin):
    """中間件判斷是否登錄"""

    def process_request(self,request):
        # 1、排除那些不需要登錄就能訪問(wèn)的頁(yè)面
        # request.path_info  獲取當(dāng)前用戶請(qǐng)求的URL  ru /login/account/
        if request.path_info == '/login/account/':
            return
        # 2、讀取當(dāng)前訪問(wèn)的用戶的session信息,如果能讀到,說(shuō)明以登錄過(guò),就可以繼續(xù)向后走
        info_dict = request.session.get("info")
        if info_dict:
            return
        # 3、沒有登錄過(guò),重新回到登錄頁(yè)面
        return redirect('/login/account/')

  • 使用中間件,在settings.py中注冊(cè)中間件
    會(huì)按這個(gè)順序執(zhí)行,中間件定義好后,會(huì)自動(dòng)調(diào)傭
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'app01.middleware.auth.AuthMiddleWare',
]

中間件添加好后,你再?zèng)]有登錄的情況下去訪問(wèn)http://127.0.0.1:8000/user/list/ 這些頁(yè)面會(huì)自動(dòng)跳轉(zhuǎn)到登錄界面。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-638991.html

到了這里,關(guān)于django實(shí)現(xiàn)登錄和登錄的鑒權(quán)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 搞懂K8s的鑒權(quán)

    搞懂K8s的鑒權(quán)

    作者:陳亦帥,中國(guó)移動(dòng)云能力中心軟件研發(fā)工程師,專注于云原生、微服務(wù)、算力網(wǎng)絡(luò)等 本文介紹K8s中的鑒權(quán)模塊。對(duì)其4種鑒權(quán)模式都進(jìn)行了概述講解。結(jié)合例子著重對(duì)大家日常中使用最多的RBAC鑒權(quán)模式進(jìn)行了說(shuō)明。 《搞懂K8s認(rèn)證》中,我們提到不論是通過(guò)kubectl客戶端

    2024年02月21日
    瀏覽(12)
  • Unity 制作登錄功能02-創(chuàng)建和鏈接數(shù)據(jù)庫(kù)(SQlite)

    Unity 制作登錄功能02-創(chuàng)建和鏈接數(shù)據(jù)庫(kù)(SQlite)

    在Unity開發(fā)游戲時(shí)使用SQLite有多種原因,以下是其中一些主要原因: 嵌入式數(shù)據(jù)庫(kù):SQLite是一個(gè)嵌入式數(shù)據(jù)庫(kù)引擎,這意味著它不需要單獨(dú)的服務(wù)器進(jìn)程。這使得使用SQLite非常方便,并且可以輕松地在不同的平臺(tái)和操作系統(tǒng)上使用。 易于使用:SQLite易于學(xué)習(xí)和使用,具有簡(jiǎn)潔

    2024年02月04日
    瀏覽(82)
  • nacos添加權(quán)限控制的鑒權(quán)功能

    nacos如果使用權(quán)限控制的鑒權(quán)功能,需要在配置文件添加特定參數(shù),我這邊是k8s部署的,需要在k8s yaml文件中添加如下參數(shù)才能使用權(quán)限控制的鑒權(quán)功能: 如果是非docker和k8s環(huán)境的,可以直接修改application.properties文件: 開啟鑒權(quán)之后,application.properties中的配置信息為: 鑒權(quán)

    2024年02月16日
    瀏覽(25)
  • [Python+Django]Web學(xué)生信息管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)及系統(tǒng)實(shí)現(xiàn)

    [Python+Django]Web學(xué)生信息管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)及系統(tǒng)實(shí)現(xiàn)

    本文我們完成數(shù)據(jù)的設(shè)計(jì),并通過(guò)Django框架完成數(shù)據(jù)庫(kù)構(gòu)建同時(shí)利用Django框架模式實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的功能。 簡(jiǎn)單的包裝下畢設(shè)應(yīng)該沒問(wèn)題了。 Python,Mysql,Pycharm的安裝本文就不做特別介紹了,有需要的同學(xué)請(qǐng)參考如下博文。 Python + Django4 搭建個(gè)人博客(二):準(zhǔn)備開

    2024年02月03日
    瀏覽(57)
  • Python數(shù)據(jù)庫(kù)模塊(sqlite3,SQLite3)

    創(chuàng)建數(shù)據(jù)庫(kù):在控制臺(tái)sqlite3 name sqlite3.connect(database [,timeout ,other optional arguments]) 打開數(shù)據(jù)庫(kù);如果指數(shù)據(jù)庫(kù)存在則返回一個(gè)連接對(duì)象,如果不存在則會(huì)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù); connection.cursor() 創(chuàng)建一個(gè)cursor; cursor.execute(sql) 執(zhí)行一個(gè)sql語(yǔ)句,該語(yǔ)句可以被參數(shù)化; connection.execut

    2024年03月19日
    瀏覽(27)
  • python在Django中,如何使用MySQL數(shù)據(jù)庫(kù)進(jìn)行分頁(yè)怎么實(shí)現(xiàn)

    在Django中,使用MySQL數(shù)據(jù)庫(kù)進(jìn)行分頁(yè)是一個(gè)相對(duì)簡(jiǎn)單的任務(wù)。Django的ORM提供了內(nèi)置的分頁(yè)功能,你只需要使用Paginator類即可。以下是一個(gè)基本的示例,展示了如何在Django中使用MySQL進(jìn)行分頁(yè): 首先,確保你已經(jīng)安裝了Django和MySQL,并且已經(jīng)配置了Django項(xiàng)目以使用MySQL數(shù)據(jù)庫(kù)。

    2024年04月29日
    瀏覽(20)
  • AndroidStudio-實(shí)現(xiàn)登錄界面(數(shù)據(jù)存儲(chǔ)在SQLite)

    AndroidStudio-實(shí)現(xiàn)登錄界面(數(shù)據(jù)存儲(chǔ)在SQLite)

    ? 要求:每種錯(cuò)誤信息采用Toast進(jìn)行提示 (1)未注冊(cè)的用戶不能進(jìn)行登錄; (2)用戶名和密碼不能為空; (3)用戶名不能重復(fù); 一、創(chuàng)建新工程 ?點(diǎn)擊next 修改名字 ,language看自己情況修改,sdk最好選21,這樣21之后的都可以用,location自己改,點(diǎn)擊finish 點(diǎn)擊左上角的And

    2024年02月03日
    瀏覽(18)
  • SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)增刪改查

    SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)增刪改查

    當(dāng)前文章介紹的設(shè)計(jì)的主要功能是利用 SQLite 數(shù)據(jù)庫(kù)實(shí)現(xiàn)寵物投喂器上傳數(shù)據(jù)的存儲(chǔ),并且支持?jǐn)?shù)據(jù)的增刪改查操作。其中,寵物投喂器上傳的數(shù)據(jù)包括投喂間隔時(shí)間、水溫、剩余重量等參數(shù)。 實(shí)現(xiàn)功能: 創(chuàng)建 SQLite 數(shù)據(jù)庫(kù)表,用于存儲(chǔ)寵物投喂器上傳的數(shù)據(jù)。 實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)

    2024年02月12日
    瀏覽(28)
  • sqlite3數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

    sqlite3代碼實(shí)現(xiàn)數(shù)據(jù)庫(kù)的插入、刪除、修改、退出功能

    2024年02月12日
    瀏覽(22)
  • 使用Python進(jìn)行數(shù)據(jù)庫(kù)連接與操作SQLite和MySQL【第144篇—SQLite和MySQL】

    使用Python進(jìn)行數(shù)據(jù)庫(kù)連接與操作SQLite和MySQL【第144篇—SQLite和MySQL】

    前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。【點(diǎn)擊進(jìn)入巨牛的人工智能學(xué)習(xí)網(wǎng)站】。 在現(xiàn)代應(yīng)用程序開發(fā)中,與數(shù)據(jù)庫(kù)進(jìn)行交互是至關(guān)重要的一環(huán)。Python提供了強(qiáng)大的庫(kù)來(lái)連接和操作各種類型的數(shù)據(jù)庫(kù),其中包括SQLite和MySQL。

    2024年03月27日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包