目錄
- 1、Django
- 2、Django用戶認證系統
- User 模型:
- Authentication 視圖:
- 認證后端 (Authentication Backends):
- Form 類:
- 中間件 (Middleware):
- 權限和組 (Permissions and Groups):
- 3、創建一個django用戶認證系統
- (1)創建和激活虛擬環境
- (2)安裝Django
- (3)創建Django應用
- (4)檢查Django安裝
- (5)創建Django項目
- (5)配置自定義用戶模型
- (6)更新settings.py文件
- (7)創建和應用遷移
- (8)創建注冊和登錄視圖
- (9)創建url配置
- 在 myapp/urls.py 文件中定義 URL 路徑:
- 在 myproject/urls.py 文件中包含應用的 URL 路徑:
- (10)創建模板
- 創建模板文件夾和模板文件:
- 創建 myapp/templates/registration/signup.html 文件:
- (11)運行服務器
- (12)在瀏覽器中訪問http://127.0.0.1:8000/accounts/signup/ 進行注冊,訪問 http://127.0.0.1:8000/accounts/login/ 進行登錄。
1、Django
Django 是一個由 Python 編寫的高級 Web 框架,旨在快速開發和干凈、實用的設計。它鼓勵使用模塊化和可復用的代碼,使得開發和維護復雜的網站變得更加容易
特點:
1. 快速開發:
Django 允許開發者在很短的時間內從設計到成品。
2. 可重用性:
Django 提供了大量的可重用代碼庫(Django apps),這些庫可以輕松地集成到項目中。
3. 安全性:
Django 有助于開發者避免常見的安全漏洞,如 SQL 注入、跨站腳本攻擊和跨站請求偽造等。
4. 可擴展性:
Django 的模塊化設計使其易于擴展和自定義。
5. 良好的文檔:
Django 擁有詳盡且更新及時的文檔,對開發者非常友好
2、Django用戶認證系統
Django 自帶一個強大的用戶認證系統,提供了用戶登錄、注冊、密碼管理等功能。這個系統包含以下主要部分:
User 模型:
Django 提供了一個默認的 User 模型,其中包含了基本的用戶信息,如用戶名、密碼、電子郵件等。
可以通過 django.contrib.auth.models.User 訪問。
Authentication 視圖:
Django 提供了現成的視圖用于處理用戶登錄、注銷、密碼重置等。
例如,LoginView、LogoutView、PasswordChangeView 和 PasswordResetView。
認證后端 (Authentication Backends):
Django 允許使用自定義認證后端,以支持不同的認證機制(如 LDAP、OAuth 等)。
默認使用的是基于用戶名和密碼的認證后端。
Form 類:
Django 提供了用于處理用戶注冊和登錄的表單類,如 UserCreationForm 和 AuthenticationForm。
中間件 (Middleware):
Django 提供了 AuthenticationMiddleware,用于將用戶的認證狀態與每個請求關聯起來。
權限和組 (Permissions and Groups):
Django 提供了基于對象級別的權限系統,可以對用戶和組分配不同的權限。
使用 Permission 和 Group 模型可以創建復雜的權限管理系統。
3、創建一個django用戶認證系統
(1)創建和激活虛擬環境
# 進入項目目錄
cd C:\Users\USERNAME\myproject
# 創建虛擬環境
python -m venv myenv
# 激活虛擬環境(Windows)
myenv\Scripts\activate
(2)安裝Django
pip install django
(3)創建Django應用
python manage.py startapp myapp
(4)檢查Django安裝
pip show django
(5)創建Django項目
django-admin startproject myproject
cd myproject
如果你仍然無法運行 django-admin,可能是因為環境變量配置不正確。可以手動將 Python 的 Scripts 文件夾路徑添加到系統的 PATH 環境變量中。步驟如下:
打開控制面板,搜索 “環境變量”。
點擊 “編輯系統環境變量”。
在系統屬性窗口中,點擊 “環境變量”。
在系統變量部分找到并選擇 Path 變量,然后點擊 “編輯”。
點擊 “新建”,然后添加你的 Python Scripts 文件夾路徑,例如 C:\Python39\Scripts 或 C:\Users<你的用戶名>\AppData\Local\Programs\Python\Python39\Scripts。
確認并保存所有更改。
(5)配置自定義用戶模型
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):phone_number = models.CharField(max_length=15, blank=True, null=True)
from django.contrib.auth.models import AbstractUser
這行代碼從 Django 的認證框架中導入了 AbstractUser 類。AbstractUser 是一個抽象基類,提供了完整的用戶認證系統所需的字段和方法。
from django.db import models
這行代碼導入了 Django 的模型模塊,模型是 Django 中用于定義數據庫表結構的類。
class CustomUser(AbstractUser)
這行代碼定義了一個名為 CustomUser 的類,該類繼承自 AbstractUser。繼承 AbstractUser 意味著 CustomUser 將擁有 AbstractUser 提供的所有字段和方法。
phone_number = models.CharField(max_length=15, blank=True, null=True)
這行代碼為 CustomUser 類添加了一個名為 phone_number 的新字段。該字段是一個字符字段,最大長度為 15,可以為空 (blank=True 表示表單驗證時可以為空,null=True 表示數據庫中該字段可以存儲空值)。
(6)更新settings.py文件
INSTALLED_APPS = [# ... 其他已安裝的應用 ...'myapp','django.contrib.auth','django.contrib.contenttypes',
]
AUTH_USER_MODEL = 'myapp.CustomUser'
(7)創建和應用遷移
python manage.py makemigrations
python manage.py migrate
(8)創建注冊和登錄視圖
from django.contrib.auth.forms import UserCreationForm#這是Django自帶的一個表單類,用于創建新用戶。它包含了用戶名、密碼和密碼確認字段
from django.urls import reverse_lazy
from django.views import generic
#用戶注冊頁面
class SignUpView(generic.CreateView):form_class = UserCreationForm#指定使用UserCreationForm表單#reverse_lazy是Django URL處理的一部分,reverse_lazy用于延遲計算URL直到它真正需要的時候。這里用于在用戶成功注冊后重定向到登錄頁面success_url = reverse_lazy('login')#指定表單提交成功后重定向的URL,這里重定向到login頁面。template_name = 'registration/signup.html'#指定渲染的模板文件,這里是registration/signup.htmlfrom django.contrib.auth.views import LoginViewclass CustomLoginView(LoginView):template_name = 'registration/login.html'
(9)創建url配置
在 myapp/urls.py 文件中定義 URL 路徑:
from django.urls import path
from .views import SignUpView, CustomLoginViewurlpatterns = [path('signup/', SignUpView.as_view(), name='signup'),path('login/', CustomLoginView.as_view(), name='login'),
]
在 myproject/urls.py 文件中包含應用的 URL 路徑:
from django.contrib import admin
from django.urls import include, pathurlpatterns = [path('admin/', admin.site.urls),path('accounts/', include('myapp.urls')),
]
(10)創建模板
創建模板文件夾和模板文件:
mkdir -p myapp/templates/registration
創建 myapp/templates/registration/signup.html 文件:
<!DOCTYPE html>
<html>
<head><title>Sign Up</title>
</head>
<body><h2>Sign Up</h2><form method="post">{% csrf_token %}{{ form.as_p }}<button type="submit">Sign Up</button></form>
</body>
</html>
(11)運行服務器
python manage.py runserver