美多商城完整教程(附程式碼資料)主要內容講述:歡迎來到美多商城!,專案準備。展示使用者註冊頁面,建立使用者模組子應用。使用者註冊業務實現,使用者註冊前端邏輯。圖形驗證碼,圖形驗證碼介面設計和定義。簡訊驗證碼,避免頻繁傳送簡訊驗證碼。賬號登入,使用者名稱登入。登入,登入開發文件。使用者基本資訊,查詢並渲染使用者基本資訊。收貨地址,省市區三級聯動。收貨地址,展示地址前後端邏輯。商品資料庫表設計,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. 準備使用者註冊模板檔案
載入頁面靜態檔案
<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. 知識要點
- Django自帶使用者認證系統,核心就是User物件,並封裝了一系列可用的方法和屬性。
- Django使用者認證系統包含了一系列對使用者的操作,比如:模型類,認證,許可權,分組,密碼處理等。
- Django使用者認證系統中的使用者模型類可以自定義,繼承自AbstractUser。
- [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. 知識要點
- 使用者認證系統中的使用者模型類,是透過全域性配置項 AUTH_USER_MODEL 決定的。
- 如果遷移自定義使用者模型類,必須先配置 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'),
]