欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django中session登錄驗(yàn)證操作指南

 更新時(shí)間:2023年04月28日 08:14:54   作者:XHunter  
本文介紹了如何使用Django中的session登錄驗(yàn)證來(lái)保護(hù)網(wǎng)站的安全性。在此過(guò)程中,我們首先介紹了Django的認(rèn)證架構(gòu)和基本概念,然后我們深入探討了如何使用session實(shí)現(xiàn)登錄驗(yàn)證功能。最后,我們解釋了如何創(chuàng)建一個(gè)Custom?User?Model,以及如何使用它來(lái)自定義用戶對(duì)象。

這一篇筆記將介紹 session 相關(guān)的內(nèi)容,包括如何在系統(tǒng)中使用 session,以及利用 session 實(shí)現(xiàn)登錄認(rèn)證的功能。

1、session 的使用流程

cookie 和 session 的基本概念這里不做贅述,這里簡(jiǎn)單講一下在 Django 中如何使用自定義的模塊來(lái)實(shí)現(xiàn)登錄、登出以及僅允許登錄用戶訪問(wèn)某些接口的操作。

Django 有一套自帶的 auth 驗(yàn)證模塊,包括用戶以及用戶及相應(yīng)的權(quán)限的表和操作,我們這里沒(méi)有用,而是單獨(dú)自定義一個(gè) user 模塊以及相應(yīng)的功能函數(shù)用來(lái)實(shí)現(xiàn)用戶的注冊(cè)、登錄和登出功能。

session 在這里的使用流程大致如下:

1、通過(guò) login 接口,驗(yàn)證成功后,將某些信息寫(xiě)入 session,可以是 user_id,或者是某個(gè)你自定義的特定的字段,反正是后續(xù)需要進(jìn)行驗(yàn)證是否登錄成功的數(shù)據(jù)

2、在訪問(wèn)特定的、需要登錄才可查看的接口前,先檢查前端返回的數(shù)據(jù)中是否包含我們?cè)谏弦徊街袑?xiě)入的數(shù)據(jù)來(lái)確保用戶是處于登錄狀態(tài),如果是,則允許繼續(xù)訪問(wèn),否則返回未登錄的信息,提示用戶需要先進(jìn)行登錄操作

3、通過(guò) logout 接口,將用戶在 login 接口里寫(xiě)入的登錄信息抹除,返回登出成功信息

在 Django 中,系統(tǒng)自動(dòng)為我們準(zhǔn)備好了 session 的所有相關(guān)的操作,我們只需要在后續(xù)的登錄操作中往里面寫(xiě)入我們需要驗(yàn)證的數(shù)據(jù)即可。

Django 這部分為我們準(zhǔn)備好的 session 操作也是通過(guò)中間件的形式存在的,是 settings.py 的 MIDDLEWARE 的 'django.contrib.sessions.middleware.SessionMiddleware'

如果不指定其他存儲(chǔ)方式,session 的數(shù)據(jù)默認(rèn)存在于我們的后端表中,這個(gè)我們?cè)诘谝淮螆?zhí)行 migrate 的時(shí)候已經(jīng)自動(dòng)為我們創(chuàng)建了該表,名為 django_session。

表數(shù)據(jù)的操作和查看我們?cè)诤竺嬖僭敿?xì)介紹。

2、session 的配置和相關(guān)方法

前面已經(jīng)介紹了 session 的操作流程,這里我們介紹一下 session 的相關(guān)配置和方法。

session 配置

以下設(shè)置都在 settings.py 中設(shè)置,事實(shí)上,這些 session 的默認(rèn)配置就差不多可以使用,后續(xù)有特殊需求我們可以再來(lái)查看,這里只介紹幾個(gè)我覺(jué)得方便我們使用的。

這個(gè)地方的官方文檔地址在:https://docs.djangoproject.com/zh-hans/3.2/ref/settings/#sessions

SESSION_COOKIE_AGE

session 過(guò)期時(shí)間,默認(rèn)為 1209600,即 14 * 24 * 60 * 60,為 14天。

我們可以在 settings.py 中配置 session 的過(guò)期時(shí)長(zhǎng),也可以在程序中使用方法手動(dòng)配置過(guò)期時(shí)長(zhǎng),方法的使用我們后面再介紹。

SESSION_COOKIE_NAME

默認(rèn)值為 sessionid,在用戶登錄之后,請(qǐng)求我們系統(tǒng),請(qǐng)求的 cookie 里會(huì)帶上 session key-value 的參數(shù),這個(gè) key 就是我們這里的 SESSION_COOKIE_NAME,默認(rèn)為 sessionid。

如果想改成其他的名稱直接定義即可。

SESSION_ENGING

Django 存儲(chǔ) session 具體數(shù)據(jù)的地方,默認(rèn)值為 django.contrib.sessions.backends.db,表示存在于數(shù)據(jù)庫(kù),也就是我們前面說(shuō)的在 django_session 這張表。

也可以存儲(chǔ)在文件或者緩存里。

session 方法

這里接著介紹一下 session 相關(guān)的方法,這些方法的調(diào)用一般是在接口里通過(guò) request.session 來(lái)操作。

這里我們只是做一下方法的作用和效果的介紹,具體用途我們?cè)谥蟮氖纠性僭敿?xì)說(shuō)明。

dict 操作

我們可以將 request.session 視作一個(gè) dict,往里面添加 user_id,is_login 等用于標(biāo)識(shí)用戶是否登錄的信息的時(shí)候可以直接操作,比如:

request.session["user_id"] = 1
request.session["is_login"] = True

keys()

輸出 request.session.keys() 返回的就是我們?cè)谇懊嫱?session 里添加的數(shù)據(jù)。

同理,request.session.items() 輸出的也是我們往里添加的數(shù)據(jù)的 key-value 的值。

del 操作

當(dāng)我們使用登出操作時(shí),可以直接使用:

del request.session["user_id"]

這種方式會(huì)刪除 session 中我們保存的 user_id 信息,這樣用戶在訪問(wèn)我們的接口的時(shí)候,如果我們做登錄驗(yàn)證的操作,就會(huì)找不到已經(jīng)登錄的信息。

之前我們說(shuō)過(guò),我們的 session 數(shù)據(jù)會(huì)保存在數(shù)據(jù)庫(kù)里,這種方式僅僅是刪除 session 中某個(gè)特定的 key-value,并不會(huì)刪除 django_session 表中這條數(shù)據(jù)

而如果想要直接刪除這一條 session 數(shù)據(jù),則可以使用 flush() 方法

flush()

下面的操作則會(huì)直接操作數(shù)據(jù)庫(kù)刪除這條 session 數(shù)據(jù):

request.session.flush()

flush() 和 前面的 del 方法都可以用作我們 logout 過(guò)程中的操作。

get_expiry_age()

獲取 session 過(guò)期秒數(shù),這個(gè)值就是前面我們?cè)?settings.py 中設(shè)置的 SESSION_COOKIE_AGE 的值。

clear_expired()

從 django_session 中移除過(guò)期的會(huì)話,下面會(huì)介紹 Session 這個(gè) model 的相關(guān)操作,這里提前說(shuō)一下這個(gè)函數(shù)。

django_session 會(huì)有一個(gè) expire_date 字段,clear_expired() 這個(gè)操作就會(huì)刪除表里 expire_date 小于當(dāng)前時(shí)間的數(shù)據(jù)。

3、users 模塊的準(zhǔn)備

前面介紹了 session 的相關(guān)配置和方法以及 session 的基本使用流程。接下來(lái)我們將介紹如何在系統(tǒng)中使用上 session。

在介紹 session 使用前,我們自定義一個(gè) users application 來(lái)做一下相關(guān)準(zhǔn)備。

新建一個(gè) application 和 相關(guān)的配置,在前面的筆記中都有介紹,這里不再做贅述,比如 app 的創(chuàng)建、在 settings.py 里 INSTALLED_APPS 里的定義,和 hunter/urls.py 的 patterns 里新建一條數(shù)據(jù),指向 users/urls.py 等操作。

其中,在 hunter/urls.py 中對(duì) users app 的 url 前綴我們定義為 users,如下:

# hunter/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),
    path('users/', include('users.urls')),
]

我們這里在 users/models.py 下新建一個(gè) User model,然后對(duì)其進(jìn)行相關(guān)的 migration 操作,使其表添加到數(shù)據(jù)庫(kù)中。

# users/models.py
from django.db import models
class User(models.Model):
    username = models.CharField(max_length=20, verbose_name="登錄用戶名", unique=True)
    password = models.CharField(max_length=256, verbose_name="加密密碼")

4、session 驗(yàn)證的的實(shí)現(xiàn)

接下來(lái),我們將新建幾個(gè)接口:

  • 用戶注冊(cè)接口
  • 用戶登錄接口
  • 用戶注銷接口
  • 用戶信息接口

可以先看下這幾個(gè)接口的代碼總攬,接著我們?cè)敿?xì)介紹一下接口的操作。

users/urls.py
from django.urls import path
from users.views import LoginView, RegisterView, LogoutView, UserInfoView
urlpatterns = [
    path("register", RegisterView.as_view()),
    path("login", LoginView.as_view()),
    path("logout", LogoutView.as_view()),
    path("user/info", UserInfoView.as_view()),
]
users/views.py

from django.contrib.auth.hashers import make_password, check_password
from django.http import JsonResponse
from django.views import View
from users.models import User
import json


# 用戶注冊(cè)
class RegisterView(View):
    def post(self, request):
        request_json = json.loads(request.body)
        username = request_json.get("username")
        password = request_json.get("password")

        if not username or not password:
            result = {"code": -1, "msg": "username or password not valid"}
        else:
            if User.objects.filter(username=username).exists():
                result = {"code": -1, "msg": "username exists"}
            else:
                User.objects.create(username=username, password=make_password(password))
                result = {"code": 0, "msg": "success"}
        return JsonResponse(result, safe=False)


# 用戶登錄
class LoginView(View):
    def post(self, request):
        request_json = json.loads(request.body)
        username = request_json.get("username")
        password = request_json.get("password")

        if not username or not password:
            result = {"code": -1, "msg": "login info error"}
        else:
            user = User.objects.filter(username=username).first()
            if not user:
                result = {"code": -1, "msg": "username not found"}
            else:
                if check_password(password, user.password):
                    result = {"code": 0, "msg": "success"}
                    request.session["username"] = username
                else:
                    result = {"code": -1, "msg": "password error"}

        return JsonResponse(result, safe=False)


# 用戶登出
class LogoutView(View):
    def post(self, request):
        if request.session.get("username"):
            del request.session["username"]
            # request.session.flush()
        return JsonResponse({"code": 0, "msg": "登出成功"})


# 用戶信息
class UserInfoView(View):
    def post(self, request):
        username = request.session.get("username")
        if username:
            result = {"code": 0, "msg": f"登錄用戶為{username}"}
            status = 200
        else:
            result = {"code": -1, "msg": "用戶未登錄"}
            status = 401
        return JsonResponse(result, status=status)

首先介紹一下,所有請(qǐng)求的參數(shù)都是放在 body 里以 json 格式傳遞,我這里都是通過(guò) postman 來(lái)請(qǐng)求測(cè)試的。

其次,在請(qǐng)求里,session 的處理可以直接通過(guò) request.session 的方式進(jìn)行,以下見(jiàn)示例。

用戶注冊(cè)接口

在注冊(cè)接口里,這里做了參數(shù)校驗(yàn)的簡(jiǎn)化,直接 json.loads() 處理 body 的內(nèi)容,然后通過(guò) Django 自帶的加密函數(shù) make_password 將密碼以加密的形式保存。

用戶登錄接口

登錄接口里,首先是校驗(yàn)賬號(hào)密碼是否正確,判斷正確后我們將登錄用戶的 username 字段寫(xiě)入 session,然后在用戶下一次請(qǐng)求的時(shí)候就會(huì)自動(dòng)獲取該 session。

或者更正確的來(lái)說(shuō),用戶登錄在操作 request.session 之后,在返回 response 的時(shí)候,系統(tǒng)會(huì)在 django_session 里新增或者更新該用戶的記錄,這條數(shù)據(jù)有包含 session_key,session_data 和 expire_date 這幾個(gè)字段。

session_key,在 cookie 的名稱是 sessionid,postman 中第一次登錄之后,在之后的每一次接口請(qǐng)求都會(huì)將sessionid=xx 傳給后端,后端就會(huì)根據(jù)這個(gè) session_key 的值去 django_session 表里查詢相應(yīng)的記錄

如果這個(gè) session_key 在表里不存在記錄,或者 expire_date 過(guò)期了,那么后端系統(tǒng)會(huì)自動(dòng)給其值賦為 None,即認(rèn)定此次接口請(qǐng)求是未登錄狀態(tài)。

expire_date 字段則是一個(gè)時(shí)間字段,主要用于判斷數(shù)據(jù)是否過(guò)期。

session_data 則是會(huì)包含我們寫(xiě)入的數(shù)據(jù),比如我們?cè)谟脩舻卿浀臅r(shí)候,通過(guò) request.session["username"] = username 的方式寫(xiě)入了一些特殊的標(biāo)識(shí),然后將其編碼成 session_data 的值存入數(shù)據(jù)庫(kù),那么用戶在下次請(qǐng)求接口的時(shí)候我們就可以通過(guò)解碼 session_data,將值取出來(lái)用于判斷用戶是否登錄。

將 session_data 解碼的方式可以單獨(dú)通過(guò)獲取 django_session 的記錄然后獲取,但是在請(qǐng)求中,Django 為我么做了這些解碼工作,我們可以直接通過(guò)前面介紹的 request.session.items() 的方式來(lái)查看在當(dāng)前登錄的 session_data 里寫(xiě)入的 key-value 數(shù)據(jù)。

注意: 前后端并不直接將 session_data 作為值傳遞,而是會(huì)傳遞 session_key 這個(gè)參數(shù),一些校驗(yàn)的數(shù)據(jù)也都是放在 session_key 對(duì)應(yīng)記錄的 session_data 中存在后臺(tái)的數(shù)據(jù)庫(kù)中。

用戶信息接口

我們假定獲取用戶信息接口要求用戶必須處于登錄狀態(tài),實(shí)際上也是,因?yàn)橛脩舨坏卿洘o(wú)法定位到用戶,然后獲取用戶的信息。

那么我們?cè)谶M(jìn)行下一步的實(shí)際操作前,我們肯定需要嘗試從 session 中獲取用戶相應(yīng)的信息,如果獲取到了,則判斷是處于登錄狀態(tài),否則是處于未登錄狀態(tài),無(wú)法獲取用戶信息。

所以我們這里的判斷是從 session 中獲取 username 字段,通過(guò)判斷 username 是否有值來(lái)判斷用戶是否處于登錄狀態(tài)。

用戶注銷接口

用戶注銷,也就是登出接口,我們這里用的是 del 的方式,這個(gè)主要是看我們驗(yàn)證用戶登錄的方式,比如我們是通過(guò)向 session 中取值 username 來(lái)判斷用戶是否登錄,那么 del request.session["username"] 的操作即可實(shí)現(xiàn)注銷的功能。

注意: 這里執(zhí)行的 del 操作僅僅是刪除 session_data 中的 {"username": "xxx"} 的數(shù)據(jù),這條 session_key 對(duì)應(yīng)的數(shù)據(jù)還存在。

可以看到,在這條代碼的下一行還有一條是執(zhí)行的 flush() 操作,這個(gè)操作是直接在數(shù)據(jù)庫(kù)里刪除這條 session 記錄,這是一種更為徹底的登出操作。

這里還需要注意的一點(diǎn)是,del 操作的前提是 session 數(shù)據(jù)里必須要有 username 這個(gè) key,否則會(huì)引起報(bào)錯(cuò),所以我們這里用了一個(gè) if 判斷邏輯,我們還可以使用 try-except 操作,或者更為徹底的操作是直接使用 flush() 操作。

至此,用戶登錄登出以及 session 數(shù)據(jù)的基本使用操作就介紹完畢了,下面我們額外介紹一些操作。

5、Session 表介紹

django_session 表的單獨(dú)獲取查看操作一般在程序里不會(huì)出現(xiàn),因?yàn)榍昂蠖硕际峭ㄟ^(guò) cookie 中 sessionid 直接獲取到對(duì)應(yīng)的數(shù)據(jù),但為了以防萬(wàn)一,或者你對(duì)這張表有一些興趣,這里額外介紹一下如何單獨(dú)操作這張表里的數(shù)據(jù)。

django_session 表的引入方式如下:

from django.contrib.sessions.models import Session

然后通過(guò) session_key 來(lái)獲取這條數(shù)據(jù),比如 session_key 為 nqu3s71e38279bl5cbgju6sut64tnqmx,就可以:

session_key = "nqu3s71e38279bl5cbgju6sut64tnqmx"

session = Session.objects.get(pk=session_key)
# session = Session.objects.get(session_key=session_key)

其中,我們向 session 里寫(xiě)入的數(shù)據(jù)都包含在 session.session_data 里,我么可以直接通過(guò) get_decoded() 方法來(lái)獲?。?/p>

session.get_decoded()

# {'username': 'root'}

6、登錄驗(yàn)證的幾種實(shí)現(xiàn)形式

獲取用戶信息這個(gè)接口需要用戶登錄才可以接著獲取用戶信息,我們這里的操作是直接判斷 session 里是否含有 username 字段。

但是如果我們系統(tǒng)里大部分接口都是需要用戶先登錄才可訪問(wèn),這樣在每個(gè) views 里都要先加這個(gè)判斷的操作,這樣的顯然是不實(shí)際的。

那么我們可以怎么操作來(lái)實(shí)現(xiàn)這個(gè)重復(fù)性的操作呢?

這里提供兩個(gè)方式,一個(gè)是裝飾器,一個(gè)是寫(xiě)在中間件里。

裝飾器實(shí)現(xiàn)登錄驗(yàn)證

其實(shí)如果直接使用 Django 自帶的登錄驗(yàn)證的功能,是可以直接使用系統(tǒng)自帶的裝飾器的,但是我們這里的表都是手動(dòng)操作的,所以這個(gè)功能的裝飾器我這里就自己實(shí)現(xiàn)了一個(gè),相關(guān)代碼如下:

def login_required_manual(func):
    def wrapper(*args, **kwargs):
        request = args[1]
        if not request.session.get("username"):
            return JsonResponse({"code": -1, "msg": "not login"}, status=401)
        return func(*args, **kwargs)
    return wrapper


class UserInfoView(View):
    @login_required_manual
    def post(self, request):
        username = request.session.get("username")
        return JsonResponse({"code": 0, "msg": f"登錄用戶{username}"})

可以看到,使用了登錄驗(yàn)證的裝飾器之后,我們的代碼都簡(jiǎn)潔了很多。

我們可以嘗試在調(diào)用登出接口后,再調(diào)用用戶信息接口,可以看到系統(tǒng)就自動(dòng)返回了未登錄的信息了。

中間件實(shí)現(xiàn)登錄驗(yàn)證

這里我們假定目前僅僅是注冊(cè)和登錄不需要登錄即可訪問(wèn),然后我們創(chuàng)建一個(gè)中間件如下:

# hunter/middlewares/auth_middleware.py

from django.http import JsonResponse

class AuthMiddleware:

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        path = request.path

        # url 路徑為 /users/register 和 /users/login 的接口不需要進(jìn)行判斷驗(yàn)證
        if path not in [
            "/users/register",
            "/users/login",
        ]:
            session = request.session
            if not session.get("username"):
                return JsonResponse({"code": -1, "msg": "not login"}, status=401)

        response = self.get_response(request)
        return response

然后在 hunter/settings.py 里加上這個(gè)中間件:

# hunter/settings.py

INSTALLED_APPS = [
    ...
    'hunter.middlewares.auth_middleware.AuthMiddleware',
    ...
]

這樣,在每個(gè)接口請(qǐng)求到達(dá) views 視圖前,都會(huì)經(jīng)歷這個(gè)驗(yàn)證的中間件,這里將接口路徑的判斷簡(jiǎn)化成注冊(cè)接口和登錄接口,這兩個(gè)接口不需要登錄即可訪問(wèn),其他接口都設(shè)置成需要登錄才可訪問(wèn)。

相比于裝飾器的做法,這里更推薦中間件的操作方式,這樣首先就不用在每個(gè) views 前加上裝飾器,另外,需要登錄才可訪問(wèn)的接口都可以在中間件部分統(tǒng)一列舉出來(lái),方便查看。

本文詳細(xì)介紹了如何使用Django中的session進(jìn)行登錄驗(yàn)證操作。我們首先通過(guò)介紹Django的認(rèn)證架構(gòu)和基本概念來(lái)為讀者打下良好的基礎(chǔ)。接著,我們提供了使用session驗(yàn)證用戶身份信息的具體步驟,并解釋了用于存儲(chǔ)和檢索用戶數(shù)據(jù)的重要工具和技術(shù)。此外,我們還介紹了如何創(chuàng)建一個(gè)Custom User Model,以及如何使用它來(lái)自定義用戶對(duì)象,從而使之適應(yīng)任何特定的業(yè)務(wù)需求。這篇文章對(duì)于那些希望提高Django安全性和用戶管理控制的開(kāi)發(fā)者和管理員非常有用。不論是初學(xué)者還是高級(jí)開(kāi)發(fā)人員都能夠從中獲得諸多實(shí)用的技巧和建議。

到此這篇關(guān)于Django中session登錄驗(yàn)證操作指南的文章就介紹到這了,更多相關(guān)Django中session登錄驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)指定字符串補(bǔ)全空格、前面填充0的方法

    python實(shí)現(xiàn)指定字符串補(bǔ)全空格、前面填充0的方法

    這篇文章主要介紹了python實(shí)現(xiàn)指定字符串補(bǔ)全空格、前面填充0的方法 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • Python 3.x基礎(chǔ)實(shí)戰(zhàn)檢查磁盤(pán)可用空間

    Python 3.x基礎(chǔ)實(shí)戰(zhàn)檢查磁盤(pán)可用空間

    這篇文章主要為大家介紹了Python 3.x基礎(chǔ)實(shí)戰(zhàn)之檢查磁盤(pán)可用空間實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Django CSRF認(rèn)證的幾種解決方案

    Django CSRF認(rèn)證的幾種解決方案

    這篇文章主要介紹了Django CSRF認(rèn)證的幾種解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python關(guān)于倒排列的知識(shí)點(diǎn)總結(jié)

    python關(guān)于倒排列的知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家分享的是一篇關(guān)于python關(guān)于倒排列的知識(shí)點(diǎn)總結(jié),有需要的朋友們可以參考下。
    2020-10-10
  • Python讀取Excel數(shù)據(jù)實(shí)現(xiàn)批量生成合同

    Python讀取Excel數(shù)據(jù)實(shí)現(xiàn)批量生成合同

    Python在自動(dòng)化辦公方面具有極大的優(yōu)勢(shì),可以解決我們工作中遇到的很多重復(fù)性問(wèn)題。本文將通過(guò)Python讀取Excel數(shù)據(jù)實(shí)現(xiàn)批量生成合同,需要的可以參考一下
    2022-05-05
  • python數(shù)據(jù)分析之聚類分析(cluster analysis)

    python數(shù)據(jù)分析之聚類分析(cluster analysis)

    聚類分析本身不是一個(gè)特定的算法,而是要解決的一般任務(wù)。它可以通過(guò)各種算法來(lái)實(shí)現(xiàn),這些算法在理解群集的構(gòu)成以及如何有效地找到它們方面存在顯著差異。這篇文章主要介紹了python數(shù)據(jù)分析之聚類分析(cluster analysis),需要的朋友可以參考下
    2021-11-11
  • python筆記:mysql、redis操作方法

    python筆記:mysql、redis操作方法

    下面小編就為大家?guī)?lái)一篇python筆記:mysql、redis操作方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • pytorch實(shí)現(xiàn)模型剪枝的操作方法

    pytorch實(shí)現(xiàn)模型剪枝的操作方法

    PyTorch 提供了內(nèi)置剪枝 API ,也支持了一些非結(jié)構(gòu)化和結(jié)構(gòu)化剪枝方法,但是 API 比較混亂,對(duì)應(yīng)文檔描述也不清晰,所以后面我還會(huì)結(jié)合微軟的開(kāi)源 nni 工具來(lái)實(shí)現(xiàn)模型剪枝功能,這篇文章主要介紹了pytorch實(shí)現(xiàn)模型剪枝, 需要的朋友可以參考下
    2023-02-02
  • Python tkinter實(shí)現(xiàn)日期選擇器

    Python tkinter實(shí)現(xiàn)日期選擇器

    這篇文章主要為大家詳細(xì)介紹了Python tkinter實(shí)現(xiàn)日期選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • PyCharm vs VSCode,作為python開(kāi)發(fā)者,你更傾向哪種IDE呢?

    PyCharm vs VSCode,作為python開(kāi)發(fā)者,你更傾向哪種IDE呢?

    這篇文章主要介紹了PyCharm和vscode作為python ide的優(yōu)劣,幫助你選擇適合自己的ide,感興趣的朋友可以了解下
    2020-08-08

最新評(píng)論