【Django開發】django美多商城項目完整開發4.0第2篇:項目準備,配置【附代碼文檔】

教程總體簡介:美多商城 商業模式介紹 1.B2B--企業對企業 2.C2C--個人對個人 5.O2O--線上到線下 開發流程 說明: 需求分析 1. 用戶部分 注冊 登錄 個人信息 地址管理 修改密碼 3. 購物車部分 購物車管理 項目架構 創建工程 1. 在git平臺創建工程 2. 添加前端文件 合并 3. 創建Django REST framework工程 4. 修改manage.py 5. 創建數據庫 收貨地址 省市區地址查詢 數據庫建表 后端接口設計 前端 使用緩存 安裝 使用方法 為省市區視圖添加緩存 緩存數據保存位置與有效期的設置 用戶地址管理代碼 后端 商品部分 數據庫表設計 表結構 數據庫模型類 FastDFS分布式文件系統 1. 什么是FastDFS 2. 文件上傳流程 Docker使用 安裝與操作 1. 在Ubuntu中安裝Docker 2. 啟動與停止 3. Docker鏡像操作 5. 將容器保存為鏡像 6. 鏡像備份與遷移 使用Docker安裝FastDFS 1. 獲取鏡像 2. 運行tracker 3. 運行storage CKEditor富文本編輯器 1. 安裝 3. 添加CKEditor設置 5. 為模型類添加字段 6. 修改Bug 添加測試數據 在admin中注冊模型類 添加FastDFS保存的測試圖片數據 添加對應的數據庫測試數據 頁面靜態化 注意 定時任務 添加應用 設置任務的定時時間 靜態化首頁的手動腳本 商品詳情頁 異步任務的觸發 腳本工具 用戶瀏覽歷史記錄 2. 查看 商品搜索 2. 搜索引擎原理 3. Elasticsearch 4. 使用Docker安裝Elasticsearch及其擴展 6. 前端 項目準備 配置 1. 修改settings/dev.py 文件中的路徑信息 2. INSTALLED_APPS 4. Redis 5. 本地化語言與時區 7. 異常處理 用戶模型類 Django用戶模型類 創建自定義的用戶模型類 購物車數據存儲設計 1. Redis保存已登錄用戶 添加到購物車 2. 后端實現 查詢購物車數據 登錄合并購物車 修改登錄視圖 訂單結算 訂單部分 保存訂單 4. 使用樂觀鎖改寫下單邏輯 5. 需要修改MySQL的事務隔離級別 下單成功頁面 前端文件 沙箱環境 電腦網站支付流程 接入步驟 配置秘鑰 發起支付 保存支付結果 Xadmin 用戶權限控制 數據庫讀寫分離 MySQL主從同步 1. 主從同步的定義 3. 配置主從同步的基本步驟 4. 詳細配置主從同步的方法 配置Django實現數據庫讀寫分離 2. 創建數據庫操作的路由分發類 部署 1. 靜態文件 2. 動態接口 圖片驗證碼 3. 設置域名 4. 前端Vue代碼: 跨域CORS 使用Celery完成發送短信 判斷帳號是否存在 1. 判斷用戶名是否存在 JWT 什么是JWT 起源 傳統的session認證 基于token的鑒權機制 JWT長什么樣? JWT的構成 header playload signature 如何應用 urllib使用說明 綁定用戶身份接口 用戶中心個人信息 郵件與驗證 使用Django發送郵件 保存郵箱并發送驗證郵件 驗證郵箱鏈接

完整筆記資料代碼:https://gitee.com/yinuo112/Backend/tree/master/Django/django美多商城項目完整開發4.0/note.md

感興趣的小伙伴可以自取哦~


全套教程部分目錄:


部分文件圖片:

項目準備

配置

1. 修改settings/dev.py 文件中的路徑信息

我們將Django的應用放到了 工程目錄/meiduo_mall/apps目錄下,如果創建一個應用,比如users,那么在配置文件的INSTALLED_APPS中注冊應用應該如下:

1
2
3
4
INSTALLED_APPS = [...'meiduo_mall.apps.users.apps.UsersConfig',
]

為了還能像如下方式簡便的注冊引用,我們需要向Python解釋器的導包路徑中添加apps應用目錄的路徑。

1
2
3
4
INSTALLED_APPS = [...'users.apps.UsersConfig',
]

我們將配置文件改為放在settings子目錄下,所以 配置文件中的BASE_DIR指向的變為了meiduo/meiduo_mall/meiduo_mall

使用sys.path添加<BASE_DIR>/apps目錄,即可添加apps應用的導包路徑。

1
2
3
4
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 添加導包路徑import sys
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

2. INSTALLED_APPS

在INSTALLED_APPS中添加rest_framework

1
2
3
4
INSTALLED_APPS = [...'rest_framework',
]

3. 數據庫

1
2
3
4
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','HOST': '127.0.0.1',  # 數據庫主機'PORT': 3306,  # 數據庫端口'USER': 'meiduo',  # 數據庫用戶名'PASSWORD': 'meiduo',  # 數據庫用戶密碼'NAME': 'meiduo_mall'  # 數據庫名字}
}

注意:

記得在meiduo/meiduo_mall/__init__.py文件中添加

1
2
3
4
import pymysqlpymysql.install_as_MySQLdb()

4. Redis

安裝django-redis,并配置

1
2
3
4
CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://10.211.55.5:6379/0","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}},"session": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://10.211.55.5:6379/1","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"

除了名為default的redis配置外,還補充了名為session的redis配置,分別使用兩個不同的redis庫。

同時修改了Django的Session機制使用redis保存,且使用名為'session'的redis配置。

此處修改Django的Session機制存儲主要是為了給Admin站點使用。

**關于django-redis 的使用,說明文檔可見[

5. 本地化語言與時區

1
2
3
4
LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'

6. 日志

1
2
3
4
LOGGING = {'version': 1,'disable_existing_loggers': False,  # 是否禁用已經存在的日志器'formatters': {  # 日志信息顯示的格式'verbose': {'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'},'simple': {'format': '%(levelname)s %(module)s %(lineno)d %(message)s'},},'filters': {  # 對日志進行過濾'require_debug_true': {  # django在debug模式下才輸出日志'()': 'django.utils.log.RequireDebugTrue',},},'handlers': {  # 日志處理方法'console': {  # 向終端中輸出日志'level': 'DEBUG','filters': ['require_debug_true'],'class': 'logging.StreamHandler','formatter': 'simple'},'file': {  # 向文件中輸出日志'level': 'INFO','class': 'logging.handlers.RotatingFileHandler','filename': os.path.join(os.path.dirname(BASE_DIR), "logs/meiduo.log"),  # 日志文件的位置'maxBytes': 300 * 1024 * 1024,'backupCount': 10,'formatter': 'verbose'},},'loggers': {  # 日志器'django': {  # 定義了一個名為django的日志器'handlers': ['console', 'file'],  # 可以同時向終端與文件中輸出日志'propagate': True,  # 是否繼續傳遞日志信息'level': 'DEBUG',  # 日志器接收的最低日志級別},}
}

7. 異常處理

修改Django REST framework的默認異常處理方法,補充處理數據庫異常和Redis異常。

新建utils/exceptions.py

1
2
3
4
from rest_framework.views import exception_handler as drf_exception_handler
import logging
from django.db import DatabaseError
from redis.exceptions import RedisError
from rest_framework.response import Response
from rest_framework import status# 獲取在配置文件中定義的logger,用來記錄日志logger = logging.getLogger('django')def exception_handler(exc, context):
    """
    自定義異常處理
    :param exc: 異常
    :param context: 拋出異常的上下文
    :return: Response響應對象
    """# 調用drf框架原生的異常處理方法response = drf_exception_handler(exc, context)if response is None:view = context['view']if isinstance(exc, DatabaseError) or isinstance(exc, RedisError):# 數據庫異常logger.error('[%s] %s' % (view, exc))response = Response({'message': '服務器內部錯誤'}, status=status.HTTP_507_INSUFFICIENT_STORAGE)return response

配置文件中添加

1
2
3
4
REST_FRAMEWORK = {# 異常處理'EXCEPTION_HANDLER': 'meiduo_mall.utils.exceptions.exception_handler',
}

項目準備

用戶模型類

Django提供了認證系統,文檔資料可參考此鏈接[

Django認證系統同時處理認證和授權。簡單地講,認證驗證一個用戶是否它們聲稱的那個人,授權決定一個通過了認證的用戶被允許做什么。 這里的詞語“認證”同時指代這兩項任務,即Django的認證系統同時提供了認證機制和權限機制。

Django的認證系統包含:

  • 用戶
  • 權限:二元(是/否)標志指示一個用戶是否可以做一個特定的任務。
  • 組:對多個用戶運用標簽和權限的一種通用的方式。
  • 一個可配置的密碼哈希系統
  • 用戶登錄或內容顯示的表單和視圖
  • 一個可插拔的后臺系統

Django默認提供的認證系統中,用戶的認證機制依賴Session機制,我們在本項目中將引入JWT認證機制,將用戶的身份憑據存放在Token中,然后對接Django的認證系統,幫助我們來實現:

  • 用戶的數據模型
  • 用戶密碼的加密與驗證
  • 用戶的權限系統

Django用戶模型類

Django認證系統中提供了用戶模型類User保存用戶的數據,默認的User包含以下常見的基本字段:

  • username

必選。 150個字符以內。 用戶名可能包含字母數字,_@+ .-個字符。在Django更改1.10:max_length從30個字符增加到150個字符。

  • first_name

可選(blank=True)。 少于等于30個字符。

  • last_name

可選(blank=True)。 少于等于30個字符。

  • email

可選(blank=True)。 郵箱地址。

  • password

必選。 密碼的哈希及元數據。 (Django 不保存原始密碼)。 原始密碼可以無限長而且可以包含任意字符。

  • groups

Group 之間的多對多關系。

  • user_permissions

Permission 之間的多對多關系。

  • is_staff

布爾值。 指示用戶是否可以訪問Admin 站點。

  • is_active

布爾值。 指示用戶的賬號是否激活。 我們建議您將此標志設置為False而不是刪除帳戶;這樣,如果您的應用程序對用戶有任何外鍵,則外鍵不會中斷。它不是用來控制用戶是否能夠登錄。 在Django更改1.10:在舊版本中,默認is_active為False不能進行登錄。

  • is_superuser

布爾值。 指定這個用戶擁有所有的權限而不需要給他們分配明確的權限。

  • last_login

用戶最后一次登錄的時間。

  • date_joined

賬戶創建的時間。 當賬號創建時,默認設置為當前的date/time。

常用方法:
  • set_password(raw_password)

設置用戶的密碼為給定的原始字符串,并負責密碼的。 不會保存User 對象。當Noneraw_password 時,密碼將設置為一個不可用的密碼。

  • check_password(raw_password)

如果給定的raw_password是用戶的真實密碼,則返回True,可以在校驗用戶密碼時使用。

管理器方法:

管理器方法即可以通過User.objects. 進行調用的方法。

  • create_user(username, email=None, password=None, **extra_fields)

創建、保存并返回一個User對象。

  • create_superuser(username, email, password, **extra_fields)

create_user() 相同,但是設置is_staffis_superuserTrue

創建自定義的用戶模型類

Django認證系統中提供的用戶模型類及方法很方便,我們可以使用這個模型類,但是字段有些無法滿足項目需求,如本項目中需要保存用戶的號,需要給模型類添加額外的字段。

Django提供了django.contrib.auth.models.AbstractUser用戶抽象模型類允許我們繼承,擴展字段來使用Django認證系統的用戶模型類。

我們現在在meiduo/meiduo_mall/apps中創建Django應用users,并在配置文件中注冊users應用。

在創建好的應用models.py中定義用戶的用戶模型類。

1
2
3
4
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

我們自定義的用戶模型類還不能直接被Django的認證系統所識別,需要在配置文件中告知Django認證系統使用我們自定義的模型類。

在配置文件中進行設置

1
2
3
4
AUTH_USER_MODEL = 'users.User'

AUTH_USER_MODEL 參數的設置以點.來分隔,表示應用名.模型類名

注意:Django建議我們對于AUTH_USER_MODEL參數的設置一定要在第一次數據庫遷移之前就設置好,否則后續使用可能出現未知錯誤。

執行數據庫遷移

1
2
3
4
python manage.py makemigrations
python manage.py migrate

注冊

創建好用戶模型類后,我們開始來實現第一個業務邏輯——用戶注冊。

設計接口的思路

  • 分析要實現的業務邏輯,明確在這個業務中需要涉及到幾個相關子業務,將每個子業務當做一個接口來設計。
  • 分析接口的功能任務,明確接口的訪問方式與返回數據:

  • 接口的請求方式,如GET 、POST 、PUT等

  • 接口的URL路徑定義
  • 需要前端傳遞的數據及數據格式(如路徑參數、查詢字符串、請求體表單、JSON等)
  • 返回給前端的數據及數據格式

在前后端分離的應用模式中,我們作為后端開發人員設計后端接口時,可以不用考慮返回給前端數據后,前端如何處理,這是前端開發人員的工作,我們只需明確我們要保存的或者要返回的是什么數據即可。

明確上述每一點后,即可開始編寫接口。

注冊業務接口分析

在用戶注冊中,需要實現以下接口:

  • 圖片驗證碼
  • 短信驗證碼
  • 用戶名判斷是否存在
  • 號判斷是否存在
  • 注冊保存用戶數據

圖片驗證碼、短信驗證碼考慮到后續可能會在其他業務中也用到,因此我們將圖片驗證碼獨立,創建一個新應用verifications,在此應用中實現圖片驗證碼、短信驗證碼

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/910276.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/910276.shtml
英文地址,請注明出處:http://en.pswp.cn/news/910276.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于 OpenCV 的圖像亮度、對比度與銳度調節

圖像亮度、對比度和銳度是圖像質量感知的重要參數&#xff0c;調節這些屬性常用于圖像增強、圖像美化或圖像分析的預處理階段。本文將基于 OpenCV 實現這三項基礎圖像處理功能&#xff0c;并提供滑動條交互界面與直方圖可視化分析&#xff0c;方便調試和理解效果。 亮度調整 圖…

WAF(web應用防火墻)的簡單了解

WAF稱之為Web應用防火墻&#xff0c;是一種專門設計用于保護web應用程序免受惡意攻擊的安全設備&#xff0c;能實時監控過濾和攔截可能對網站造成危害的網絡流量&#xff0c;從而避免網絡服務器被惡意入侵導致性能異常、數據泄露、服務中斷這些問題 (WAF是通過執行一系列針對HT…

跟著AI學習C# Day28

&#x1f4c5; Day 28&#xff1a;C# 源生成器&#xff08;Source Generators&#xff09;與編譯時元編程 ? 學習目標&#xff1a; 理解什么是 源生成器&#xff08;Source Generator&#xff09;&#xff1b;掌握如何在 編譯階段生成 C# 代碼&#xff0c;而不是運行時動態處…

設計模式精講 Day 4:建造者模式(Builder Pattern)

【設計模式精講 Day 4】建造者模式&#xff08;Builder Pattern&#xff09; 文章簡述&#xff1a; 在軟件開發中&#xff0c;對象的構造過程往往復雜且容易出錯&#xff0c;尤其是在對象包含多個可選參數或構建步驟時。建造者模式&#xff08;Builder Pattern&#xff09;正是…

如何輕松地將聯系人從 iPhone 轉移到 iPhone?

也許您升級到最新的 iPhone 型號&#xff0c;或者需要切換到另一部 iPhone 來工作。無論如何&#xff0c;您不能錯過您的聯系人&#xff0c;這對每個人來說都是最重要的數據。因此&#xff0c;今天我們將分享 5 種如何將聯系人從 iPhone 轉移到 iPhone 的方法&#xff0c;幫助您…

【51單片機簡單的流水燈程序問題】2022-5-24

1.利用單片機的P2口接8個發光二極管。簡單的流水燈程序問題-編程語言-CSDN問答 2&#xff0e;發光二極管自由閃爍&#xff08;自己設計兩種模式&#xff09;。 3&#xff0e;可通過按鍵實現暫停、啟動以及不用模式的切換。 4. 利用Proteus繪制電路原理圖 5. 元件選型&#xff1…

第七節:Vben Admin 最新 v5.0 (vben5) 快速入門 - 用戶管理(上)

Vben5 系列文章目錄 ?? 基礎篇 ? 第一節:Vben Admin 最新 v5.0 (vben5) 快速入門 ? 第二節:Vben Admin 最新 v5.0 (vben5) 快速入門 - Python Flask 后端開發詳解(附源碼) ? 第三節:Vben Admin 最新 v5.0 (vben5) 快速入門 - 對接后端登錄接口(上) ? 第四節:Vben Ad…

1572. 矩陣對角線元素的和

給你一個正方形矩陣 mat&#xff0c;請你返回矩陣對角線元素的和。 請你返回在矩陣主對角線上的元素和副對角線上且不在主對角線上元素的和。 示例 1&#xff1a; 輸入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 輸出&#xff1a;25 解釋&#xff1a;對角線的和為&#xf…

供應鏈場景使用ClickHouse最佳實踐

一、概述 ClickHouse是一款由俄羅斯公司Yandex開發的開源列式數據庫管理系統&#xff0c;以其高性能的分析查詢能力和高壓縮比著稱。供應鏈場景中&#xff0c;數據量大且數據類型復雜&#xff0c;需要高效的數據存儲和快速的查詢性能&#xff0c;ClickHouse在這些方面具有顯著…

RA4M2開發IOT(0)----安裝e2 studio

RA4M2開發IOT.0--安裝e studio 概述視頻教學樣品申請安裝 概述 瑞薩電子靈活配置軟件包 (FSP) 是用于嵌入式系統設計的高質量增強型軟件包&#xff0c;支持瑞薩電子 RA 產品家族 Arm 微控制器&#xff0c;提供用戶友好的界面且可靈活擴展&#xff0c;確保從入門級到高性能的整…

【Ambari3.0.0 部署】Step2—免密登陸認證-適用于el8

如果有其他系統部署需求可以參考原文 戳我->所有組件編譯教程 戳我->獲取部署源代碼 一、免密登錄認證 &#x1f510; 在多臺服務器協同工作的環境中&#xff0c;免密登錄&#xff08;SSH 免密認證&#xff09;是一種常見的優化手段&#xff0c;能夠極大地提升運維效率&…

網站自助廣告投放系統源碼 附安裝教程(源碼下載)

網站自助廣告投放系統源碼 全自動無人化出售網站廣告位 站長必備 源碼測試可用&#xff0c;部分加密。感興趣自行下載 源碼下載&#xff1a;https://download.csdn.net/download/m0_66047725/91093092 更多資源下載&#xff1a;關注我 圖片&#xff1a;

日常運維問題匯總-15

42.SD開票計劃產生的預收款在正式開票時未自動清賬 統馭科目&#xff08;應收、預收&#xff09;對應的字段狀態組中附加科目設置銷售訂單字段設置為了隱藏導致&#xff0c;更改為“可選輸入項” 43.MIGO取消憑證時&#xff0c;用戶反饋發現除一行外&#xff0c;其它都不能取消…

【設計模式】6.原型模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 原型模式 1. 基礎 import copyclass Resume:def __init__(self, name):self.name nameself.sex Noneself.age Noneself.time_area Noneself.compan…

【算法 day08】LeetCode 151.翻轉字符串里的單詞 |卡碼網:55.右旋轉字符串

151.翻轉字符串里的單詞 題目鏈接 | 文檔講解 |視頻講解 : 鏈接 1.思路&#xff1a; 1.去除字符串頭尾的空格 &#xff0c;使用庫函數 trim&#xff08;&#xff09; 2.對字符串進行分割&#xff0c;使用庫函數split&#xff08;&#xff09; 3.創建StringBuilder sb&#x…

【WordPress優化插件】WPOPT v2.4.7

WPOPT插件,是由本站開發的一款WordPress優化插件,能對WordPress底層功能進行優化,支持功能開關,系統加速等功能。 2.0版本全新發布,采用vite打包,界面采用Vue3+element-plus制作。無論是外觀,還是框架功能,都是空前的強大。 功能更多,更強,是所有WordPress網站都值得…

如何使用 mkimage 工具生成 uImage 文件(RISC-V 環境)

一、mkimage 命令參數詳解 在 RISC-V Linux 環境下&#xff0c;使用 U-Boot 的 mkimage 工具生成 uImage 的基本命令格式如下&#xff1a; mkimage -A riscv -O linux -T kernel -C compression -a load_addr -e entry_addr -n "描述信息" -d Image uImage核心參數…

React Native 搭建iOS與Android開發環境

目錄 第一步 第二步 一、必須安裝的工具 二、具體安裝步驟 1. 安裝 Homebrew 切換國內源和其他配置&#xff1a; 2. 安裝 node 3.下載watchman 4. Ruby 5.CocoaPods 配置環境 6. jdk 7. 配置git 開發環境 第三步——啟動項目&#xff08;可以忽略&#xff09; 1…

Vue 簡寫形式全解析:清晰記憶指南

Vue 簡寫形式全解析:清晰記憶指南 Vue 中的各種簡寫形式確實容易混淆,我將它們系統化整理,并提供了多種記憶方法,幫助你輕松掌握! 一、核心簡寫形式匯總表 完整形式簡寫形式適用場景記憶技巧v-bind:attribute:attribute動態綁定屬性: 像鏈條,表示"綁定"v-on:…

車載電子電器架構 --- 電子電氣架構設計方案

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…