【Django開發】0到1美多商城專案md教程第2篇:展示使用者註冊頁面,1. 建立使用者模組子應用【附程式碼文件】

程序员一诺yinuo發表於2024-03-18

美多商城完整教程(附程式碼資料)主要內容講述:歡迎來到美多商城!,專案準備。展示使用者註冊頁面,建立使用者模組子應用。使用者註冊業務實現,使用者註冊前端邏輯。圖形驗證碼,圖形驗證碼介面設計和定義。簡訊驗證碼,避免頻繁傳送簡訊驗證碼。賬號登入,使用者名稱登入。登入,登入開發文件。使用者基本資訊,查詢並渲染使用者基本資訊。收貨地址,省市區三級聯動。收貨地址,展示地址前後端邏輯。商品資料庫表設計,SPU和SKU。準備商品資料,容器化方案Docker。首頁廣告,展示首頁商品頻道分類。商品列表頁,列表頁面包屑導航。商品搜尋,Haystack擴充套件建立索引。商品詳情頁,統計分類商品訪問量。購物車管理,新增購物車。購物車管理,刪除購物車。訂單,結算訂單。提交訂單,使用樂觀鎖併發下單。對接系統,訂單支付功能。頁面靜態化,首頁廣告頁面靜態化。MySQL讀寫分離,MySQL主從同步。。部署。meiduo_mallBuild Setup。Summary。

全套筆記資料程式碼移步: 前往gitee倉庫檢視

感興趣的小夥伴可以自取哦,歡迎大家點贊轉發~


全套教程部分目錄:


部分檔案圖片:

展示使用者註冊頁面

建立使用者模組子應用

1. 建立使用者模組子應用

1.準備apps包,用於管理所有應用

2.在apps包下建立應用users

$ cd ~/projects/meiduo_project/meiduo_mall/meiduo_mall/apps
$ python ../../manage.py startapp users

2. 檢視專案導包路徑

重要提示:

  • 若要知道如何匯入users應用並完成註冊,需要知道專案導包路徑

已知導包路徑

  • meiduo_project/meiduo_mall

已知 'users'應用所在目錄

  • meiduo_project/meiduo_mall/meiduo_mall/apps/users

得到匯入'users'應用的導包路徑是:meiduo_mall/apps/users

3. 註冊使用者模組子應用

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'meiduo_mall.apps.users', # 使用者模組應用
]

註冊完users應用後,執行測試程式。

追加導包路徑

思考:

  • 是否可以將註冊users應用做的更加簡便?
  • 按照如下形式,直接以應用名users註冊
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'users', # 使用者模組應用
]

分析:

  • 已知導包路徑

    • meiduo_project/meiduo_mall
  • 已知'users'應用所在目錄

    • meiduo_project/meiduo_mall/meiduo_mall/apps/users
  • 若要直接以應用名'users'註冊

    • 需要一個導包路徑:meiduo_project/meiduo_mall/meiduo_mall/apps

解決辦法

* 追加導包路徑:`meiduo_project/meiduo_mall/meiduo_mall/apps`

1. 追加導包路徑

1.檢視專案BASE_DIR

2.追加導包路徑

2. 重新註冊使用者模組應用

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'users', # 使用者模組應用
]

重新註冊完users應用後,執行測試程式。

3. 知識要點

  1. 檢視導包路徑

    • 透過檢視導包路徑,可以快速的知道專案中各個包該如何的匯入。
    • 特別是接手老專案時,可以儘快的適應專案導包的方式。
  2. 追加導包路徑

    • 透過追加導包路徑,可以簡化某些目錄複雜的導包方式。

展示使用者註冊頁面

1. 準備使用者註冊模板檔案

載入頁面靜態檔案

<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>美多商城-註冊</title>
    <link rel="stylesheet" type="text/css" href="{{ static('css/reset.css') }}">
    <link rel="stylesheet" type="text/css" href="{{ static('css/main.css') }}">
</head>

2. 定義使用者註冊檢視

class RegisterView(View):
    """使用者註冊"""

    def get(self, request):
        """
        提供註冊介面
        :param request: 請求物件
        :return: 註冊介面
        """
        return render(request, 'register.html')

3. 定義使用者註冊路由

1.總路由

urlpatterns = [
    # users
    url(r'^', include('users.urls', namespace='users')),
]

2.子路由

urlpatterns = [
    # 註冊
    url(r'^register/$', views.RegisterView.as_view(), name='register'),
]

使用者模型類

定義使用者模型類

1. Django預設使用者認證系統

  • Django自帶使用者認證系統

    • 它處理使用者賬號、組、許可權以及基於cookie的使用者會話。
  • Django認證系統位置

    • django.contrib.auth包含認證框架的核心和預設的模型。
    • django.contrib.contenttypes是Django內容型別系統,它允許許可權與你建立的模型關聯。
  • Django認證系統同時處理認證和授權

    • 認證:驗證一個使用者是否它聲稱的那個人,可用於賬號登入。
    • 授權:授權決定一個透過了認證的使用者被允許做什麼。
  • Django認證系統包含的內容

    • 使用者:使用者模型類、使用者認證。
    • 許可權:標識一個使用者是否可以做一個特定的任務,MIS系統常用到。
    • 組:對多個具有相同許可權的使用者進行統一管理,MIS系統常用到。
    • 密碼:一個可配置的密碼雜湊系統,設定密碼、密碼校驗。

2. Django預設使用者模型類

  • Django認證系統中提供了使用者模型類User儲存使用者的資料。

    • User物件是認證系統的核心。
  • Django認證系統使用者模型類位置

    • django.contrib.auth.models.User

  • 父類AbstractUser介紹

    • User物件基本屬性

      • 建立使用者(註冊使用者)必選: username、password
      • 建立使用者(註冊使用者)可選:email、first_name、last_name、last_login、date_joined、is_active 、is_staff、is_superuse
      • 判斷使用者是否透過認證(是否登入):is_authenticated
    • 建立使用者(註冊使用者)的方法

user = User.objects.create_user(username, email, password, **extra_fields)




* 使用者認證(使用者登入)的方法
```python
from django.contrib.auth import authenticate
user = authenticate(username=username, password=password, **kwargs)
  • 處理密碼的方法

    • 設定密碼:set_password(raw_password)
    • 校驗密碼:check_password(raw_password)

3. 自定義使用者模型類

思考:為什麼要自定義使用者模型類?

  • 觀察註冊介面會發現,美多商城註冊資料必選使用者mobile資訊
  • 但是Django預設使用者模型類中沒有mobile欄位,所以要自定義使用者模型類。

如何自定義使用者模型類?

  • 繼承自AbstractUser(可透過閱讀Django預設使用者模型類的原始碼得知) 。
  • 新增mobile欄位。
from django.db import models
from django.contrib.auth.models import AbstractUser

  
  
# Create your models here.
  
  


class User(AbstractUser):
    """自定義使用者模型類"""
    mobile = models.CharField(max_length=11, unique=True, verbose_name='手機號')

    class Meta:
        db_table = 'tb_users'
        verbose_name = '使用者'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username

4. 知識要點

  1. Django自帶使用者認證系統核心就是User物件,並封裝了一系列可用的方法和屬性。
  2. Django使用者認證系統包含了一系列對使用者的操作,比如:模型類,認證,許可權,分組,密碼處理等。
  3. Django使用者認證系統中的使用者模型類可以自定義,繼承自AbstractUser
  4. [Django使用者認證系統說明文件](

遷移使用者模型類

1. 指定使用者模型類

思考:為什麼Django預設使用者模型類是User?

  • 閱讀原始碼:'django.conf.global_settings'
AUTH_USER_MODEL = 'auth.User'

結論:

  • Django使用者模型類是透過全域性配置項 AUTH_USER_MODEL 決定的

配置規則:

AUTH_USER_MODEL = '應用名.模型類名'
  
  
# 指定本專案使用者模型類
  
  
AUTH_USER_MODEL = 'users.User'

2. 遷移使用者模型類

1.建立遷移檔案

  • python manage.py makemigrations

2.執行遷移檔案

  • python manage.py migrate

3. 知識要點

  1. 使用者認證系統中的使用者模型類,是透過全域性配置項 AUTH_USER_MODEL 決定的。
  2. 如果遷移自定義使用者模型類,必須先配置 AUTH_USER_MODEL

使用者註冊業務實現

使用者註冊業務邏輯分析

1. 使用者註冊業務邏輯分析

使用者註冊介面設計和定義

1. 設計介面基本思路

  • 對於介面的設計,我們要根據具體的業務邏輯,設計出適合業務邏輯的介面。

  • 設計介面的思路:

    • 分析要實現的業務邏輯:

      • 明確在這個業務中涉及到幾個相關子業務。
      • 將每個子業務當做一個介面來設計。
    • 分析介面的功能任務,明確介面的訪問方式與返回資料:

      • 請求方法(如GET、POST、PUT、DELETE等)。
      • 請求地址。
      • 請求引數(如路徑引數、查詢字串、表單、JSON等)。
      • 響應資料(如HTML、JSON等)。

2. 使用者註冊介面設計

1.請求方式

選項 方案
請求方法 POST
請求地址 /register/

2.請求引數:表單引數

引數名 型別 是否必傳 說明
username string 使用者名稱
password string 密碼
password2 string 確認密碼
mobile string 手機號
sms_code string 簡訊驗證碼
allow string 是否同意使用者協議

3.響應結果:HTML

  • register.html
響應結果 響應內容
註冊失敗 響應錯誤提示
註冊成功 重定向到首頁

3. 使用者註冊介面定義

1.註冊檢視

class RegisterView(View):
    """使用者註冊"""

    def get(self, request):
        """
        提供註冊介面
        :param request: 請求物件
        :return: 註冊介面
        """
        return render(request, 'register.html')

    def post(self, request):
        """
        實現使用者註冊
        :param request: 請求物件
        :return: 註冊結果
        """
        pass

2.總路由

urlpatterns = [
    # users
    url(r'^', include('users.urls', namespace='users')),
]

3.子路由

urlpatterns = [
    # 註冊
    url(r'^register/$', views.RegisterView.as_view(), name='register'),
]

未完待續, 同學們請等待下一期

全套筆記資料程式碼移步: 前往gitee倉庫檢視

感興趣的小夥伴可以自取哦,歡迎大家點贊轉發~

相關文章