https://leetcode.cn/problems/h-index/description/?envType=study-plan-v2&envId=top-interview-150 註:題目有點難理解,多讀幾遍 可以這樣考慮,建立另一個臨時數組temp,當第i篇文章被引用citiation ...
美多商城完整教程(附代碼資料)主要內容講述:歡迎來到美多商城!,項目準備。展示用戶註冊頁面,創建用戶模塊子應用。用戶註冊業務實現,用戶註冊前端邏輯。圖形驗證碼,圖形驗證碼介面設計和定義。簡訊驗證碼,避免頻繁發送簡訊驗證碼。賬號登錄,用戶名登錄。登錄,登錄開發文檔。用戶基本信息,查詢並渲染用戶基本信息。收貨地址,省市區三級聯動。收貨地址,展示地址前後端邏輯。商品資料庫表設計,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'),
]