• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Django框架

    電商網站(Django框架)—— 大綱內容與基本功能分析

    原創 2017年10月28日 14:42:20

    1.  項目架構

    2.  數據庫表結構


     

    3.  數據庫讀寫分離

     

     

    4.  Django讀寫分離配置

    新建utils/db_router.py

     

    課后閱讀資料

    http://python.usyiyi.cn/documents/django_182/topics/db/multi-db.html

     

    5.  用戶認證模型

     

     

    注意: AUTH_USER_MODEL配置參數要在第一次遷移數據庫之前配置,否則可能django的認證系統工作不正常

    6. 類視圖

    將視圖view以類的形式定義

    通用類視圖基類:

    django.views.generic.View  ( 與django.views.generic.base.View 是同一個)

    urls.py中配置路由使用類視圖的as_view()方法

    由dispatch()方法具體將請求request分發至對應請求方式的處理方法中(get、post等)

    擴展閱讀:

    http://python.usyiyi.cn/translate/django_182/topics/class-based-views/intro.html

     

    7. 用戶模塊開發

    7.1 Django認證系統文檔

    http://python.usyiyi.cn/documents/django_182/topics/auth/default.html

     

    7.2 用戶注冊

    注冊: 保存數據庫-> 生成token  -> 發送郵件

    (用戶點擊郵件中的鏈接地址---**的地址)

    **:獲取token設置用戶的**狀態

    把用戶的id放到token中  簽名

    安裝itsdangerous:      pip install itsdangerous

    文檔 http://itsdangerous.readthedocs.io/en/latest/ 

    安裝celery:   pipinstall celery

     

    7.3 用戶**

     

    7.4 用戶登錄

    使用redis作為session服務器

    安裝命令:pip install django-redis

    django-redis文檔:

    http://django-redis-chs.readthedocs.io/zh_CN/latest/#

     

    django的session使用文檔:

    http://python.usyiyi.cn/documents/django_182/topics/http/sessions.html

    登錄-> 保存用戶的session數據

    只要瀏覽器中cookie能夠在訪問的時候帶上session_id,

            用戶訪問其他頁面,不需要再次登錄

    如果cookie中沒有session_id,訪問的時候后端無法識別用戶,要求用戶從新登錄

    7.5 用戶退出

     

    7.6 用戶地址

     

    7.7 用戶個人信息

    瀏覽歷史記錄:

    產生:  用戶訪問商品詳情頁面的時候記錄  次數頻繁,所以放到內存型數據庫中  保存sku_id

    不放到session數據中,方便用戶退出再登陸的時候還能查看到數據

    手動直接操作redis,存放歷史記錄信息

     

    查詢: 只在用戶的個人信息頁面中看到 

    “key”: 字符串、列表、哈希、set  zset

     

    用一條記錄保存所有人的信息, 維護起來不方便,不采納

    “history”: {“user_1”:“1,2,3,4,5,6”  , “user_2”:  “”}

    conn.hget(“history”, “user_1”)

     

    每個用戶一條數據,單獨維護

    “history_1”:  [1,2,2,3,4,4]

    conn.lrange(“history_1”,0, 4)

     

    7.7.1  django查詢集queryset使用方法

    8  Address.objects.all().order_by("-create_time")
    Address.objects.filter().order_by(
    "-create_time")

    select * 
    from tbl_addrwhere .... order by create_time desc

    Address.objects.filter().order_by("-create_time")

       

    select * from tbl where ....  order by create_time desc

     

    Address.objects.all().order_by(“-create_time”)[0]

      Address.objects.latest(“-create_time”)

    關于Django查詢方法的文檔:

    http://python.usyiyi.cn/documents/django_182/ref/models/querysets.html

     

    7.7.2 使用redis保存用戶的瀏覽歷史 

    通過django_redis 的 get_redis_connection(連接名稱) 在程序中使用redis

     

    7.7.3 redis中的用戶瀏覽歷史數據類型選擇

    http://redisdoc.com/index.html

    http://redis-py.readthedocs.io/en/latest/#indices-and-tables

     

    瀏覽歷史記錄redis

    字符串  列表  哈希  set

    sku_id 

    “user_1_history”:“1,2,3,4,5”

     

     

    8.  商品模塊開發

    8.1    了解FastDFS分布式文件系統

    集群

     

     

    啟動FastDFS的方法,需要的操作:

    1.修改如下的配置文件  (在/etc/fdfs目錄中)

    tracker_server=自己的ip地址:22122

    2.啟動tracker、storage、nginx服務:

    sudo servicefdfs_trackerd start

    sudo servicefdfs_storaged start

    sudo /usr/local/nginx/sbin/nginx

    3. 執行如下命令測試是否成功

    fdfs_upload_file /etc/fdfs/client.conf 要上傳的圖片文件

    如果返回類似group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg的文件id則說明文件上傳成功

    在瀏覽器中可以用   127.0.0.1:8888/返回的文件id  

    訪問圖片

     

    python對接fastdfs

    1. workon django_py3

    2. 進入fdfs_client-py-master.zip所在目錄

    3. pip install fdfs_client-py-master.zip

     

    >>> fromfdfs_client.client import Fdfs_client

    >>> client =Fdfs_client('/etc/fdfs/client.conf')

    >>> ret =client.upload_by_filename('test')

    >>> ret

    {'Group name':'group1','Status':'Uploadsuccessed.', 'Remote file_id':'group1/M00/00/00/

            wKjzh0_xaR63RExnAAAaDqbNk5E1398.py','Uploadedsize':'6.0KB','Local file name':'test'

            , 'Storage IP':'192.168.243.133'}

     

    8.2 Django二次開發對接FastDFS

    Django文檔:

    http://python.usyiyi.cn/translate/django_182/ref/files/storage.html

    http://python.usyiyi.cn/translate/django_182/howto/custom-file-storage.html

     

     

    創建utils/fastdfs 目錄

     

    在goods/admin.py中注冊商品相關模型,然后登陸admin站點進行測試

     

     

    8.3 富文本編輯器

    為Goods模型添加詳細信息字段

     

    8.4 商品首頁

    8.4.1 基本頁面處理

    8.4.2 保存購物車信息的數據設計

    保存在redis中,每個人維護一條購物車數據, 選擇哈希類型

    “cart_用戶id”:{ “sku_1”:“10”,  ” sku_2”: “11”}

    hlen()


    8.4.3 頁面靜態化

    把原本動態的頁面處理結果保存成html文件,讓用戶直接訪問這個生成出來的靜態的html頁面

     

     


    8.4.4 使用緩存

    將處理計算的結果先臨時保存起來,下次使用的時候可以先直接使用,如果沒有這個備份的數據,重新進行計算處理

    將緩存數據保存在內容中(本項目中保存在redis中)

    cache

    pickle  dumps loads

     

    修改了數據庫的數據,直接刪除緩存

    緩存要設置有效期

     

    django文檔:

    http://python.usyiyi.cn/translate/django_182/topics/cache.html

    8.5 商品詳情頁

    RESTFul

    8.6 商品列表頁

    分頁

    http://python.usyiyi.cn/documents/django_182/topics/pagination.html

     

     

    8.7 搜索頁面

    草莓  GoodsSKU   df_sku

    select* from df_sku where name like ‘%草莓%’ or title like ‘%草莓%’

    草莓 500g    盒裝草莓    大草莓

     

    北京草莓

     

    搜索引擎 

    1.      建立數據的索引表    草莓 sku= 1 2 3  基圍蝦 sku =100

    2.      進行分詞操作

    whoosh 

     

    搜索框架

    haystack  搭建了用戶和搜索引擎之間的溝通問題

     

     

     

    配置:

    1)     安裝python包。

    pip install django-haystack

    pip install whoosh

    2)     在settings.py文件中注冊應用haystack并做如下配置。


    3)在goods應用目錄下新建一個search_indexes.py文件,在其中定義一個商品索引類e。


    4)在templates下面新建目錄search/indexes/goods


    在此目錄下面新建一個文件goodssku_text.txt并編輯內容如下:


    5)使用命令生成索引文件。

             pythonmanage.py rebuild_index

    全文檢索的使用:

    1)配置url。


    2)表單搜索時設置表單內容如下。


    點擊標題進行提交時,會通過haystack搜索數據。

    全文檢索結果:

    搜索出結果后,haystack會把搜索出的結果傳遞給templates/search目錄下的search.html,傳遞的上下文包括:

    l  query:搜索關

    l  page:當前page

    l  paginator:分paginator

    HAYSTACK_SEARCH_RESULTS_PER_PAGE 可每頁顯示數量

     

    改變分詞方式:

    1.        安裝jieba分詞模塊。

    pip install jieba

    2.     找到虛擬環境py_django下的haystack目錄。

    /home/python/.virtualenvs/bj10_py3/lib/python3.5/site-packages/haystack/backends/

    3.     在上面的目錄中創建ChineseAnalyzer.py文件。

    import jieba
    from whoosh.analysis import Tokenizer, Token
     
    class ChineseTokenizer(Tokenizer):
        def __call__(self, value, positions=False, chars=False,
                     keeporiginal=False, removestops=True,
                     start_pos=0, start_char=0, mode='', **kwargs):
            t = Token(positions, chars, removestops=removestops, mode=mode, **kwargs)
            seglist = jieba.cut(value, cut_all=True)
            for w in seglist:
                t.original = t.text = w
                t.boost = 1.0
                if positions:
                    t.pos = start_pos + value.find(w)
                if chars:
                    t.startchar = start_char + value.find(w)
                    t.endchar = start_char + value.find(w) + len(w)
                yield t
     
    def ChineseAnalyzer():
        return ChineseTokenizer()

    4.     復制whoosh_backend.py文件,改為如下名稱:

            whoosh_cn_backend.py

    5.     打開復制出來的新文件,引入中文分析類,內部采用jieba分詞。

    from .ChineseAnalyzer import ChineseAnalyzer

    6.     更改詞語分析類。

    查找
    analyzer=StemmingAnalyzer()
    改為
    analyzer=ChineseAnalyzer()

    7.         

    8.        

    9.        重新創建索引數據

    python manage.py rebuild_index

     

    9.  購物車模塊

    如果用戶未登錄,則將購物車數據保存到用戶瀏覽器的cookie中

    將購物車的數據轉換為json字符串存在cookie

    “cart”:‘{ “sku_1”:10, “sku_2”: 20  }’

     

    如果用戶已登錄,則將購物車數據保存到后端的redis中

     

    在用戶登陸的時候,將cookie中的購物車信息與redis中的購物車進行合并

     

     

    json模塊

    將python中的字典轉換為json字符串   json.dumps( python字典數據 )

    將json字符串轉換為python中的字典  json.loads( json字符串 )

    9.1    添加到購物車

    確定前端是否傳遞數據,傳遞什么數據,什么格式

    確定前端訪問的方式(get  post)

    確定返回給前端的什么數據,什么格式

    9.2    購物車頁面

    decimal      python中精度比較高的小數點數字

     

    from decimal import Decimal

     

    9.3    更新購物車

    非冪等  /cart/add?sku_id=1&num=2

     

    冪等/cart/update?sku_id=1&finally_num=18

     

    對于同一種行為,如果執行不論多少次,最終的結果都是一致相同的,就稱這種行為是冪等的

    對于同一種行為,如果最終的結果與執行的次數有關,每次執行后結果都不相同,就稱這種行為為非冪等

     

    10.       訂單模塊

    10.1 確認訂單頁面(place order)

    從商品詳情頁【立即購買】跳轉過來----把商品存入購物車

    從購物車頁面【去結算】跳轉過來

    10.2 提交訂單(下單)

    python 的兩個時間模塊 datetime  time

    django中提供了一個支持時區的時間 django.utils.timezone

     

    strftime 將時間類型轉換為字符串類型

    strptime 將字符串類型轉換為時間類型

     

    10.2.1 驗證登錄的裝飾器(自定義,返回json數據)

    utils/views.py中

     

    10.2.2 事務的使用:

    http://python.usyiyi.cn/translate/django_182/topics/db/transactions.html

     

    from django.db import transaction

    save_id = transaction.savepoint()  # 創建保存點

    transaction.savepoint_rollback(save_id)  # 回退(回滾)到保存點

    transaction.savepoint_commit(save_id)  # 提交保存點

     

    10.2.3 并發訪問控制

    并發

     

    悲觀鎖

    SQL語句: select …. for update

    Select * from tble where  id fro update


    樂觀鎖

    查詢時不鎖數據,提交更改時進行判斷

     

    隊列

     

     

       




    10.3    用戶訂單頁面

     

    10.4    訂單支付

     

     

    10.5    檢查訂單支付狀態

     

    10.6    訂單評論

     

    WSGI   并發

     

    服務器   wsgi  框架部分(動態的業務邏輯處理程序)

     

     

    總結(主要功能與難點)

     

    1.   B2C  PC電腦端網頁

    2.   功能模塊:用戶模塊  商品模塊(首頁、 搜索、商品) 購物車模塊  訂單模塊(下單、 支付)

    3.   用戶模塊:注冊、登錄、**、退出、個人中心、地址

    4.   商品模塊:首頁、詳情、列表、搜索

    5.   購物車: 增加、刪除、修改、查詢

    6.   訂單模塊:確認訂單頁面、提交訂單(下單)、請求支付、查詢支付結果、評論

    7.   django默認的認證系統 AbstractUser

    8.   itsdangerous  生成簽名的token (序列化工具 dumps loads)

    9.   郵件 (django提供郵件支持 配置參數 send_mail)

    10. celery (重點  整體認識 異步任務)

    11. 頁面靜態化 (緩解壓力  celery nginx)

    12. 緩存(緩解壓力, 保存的位置、有效期、與數據庫的一致性問題)

    13. FastDFS (分布式的圖片存儲服務, 修改了django的默認文件存儲系統)

    14. 搜索( whoosh  索引  分詞)

    15. 購物車登錄與未登錄的結局方案  cookie redis 哈希

    16. ajax 前端用ajax請求后端接口

    17. 事務

    18. 高并發的庫存問題 (悲觀鎖、樂觀鎖、隊列)

    19. 支付的使用流程

    20.  nginx (負載均衡  提供靜態文件)

    21. 數據庫主從 (讀寫分離)

    版權聲明:本文為weixin_41387481原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_41387481/article/details/79195717

    智能推薦

    Django框架 - 01 簡介

    Django的簡介: 1. 概述 2. Django中的MVC模式 : 概述 : 一種軟件設計典范, 用一種業務邏輯,數據, 界面顯示分離的方法組織代碼, 將業務邏輯聚集到一個部件里面。 核心思想 : 解耦 圖解 : 編程模式 : 優點 : 降低各功能模塊之間的耦合性, 方便變更, 更容易重構代碼, 最大程度上實現了代碼的重用. 瀏覽器中MVC的表現形式圖解: 3. Django中的MVT模式 :...

    Django框架解析

    前端相關 展示內容:瀏覽器接收后端返回的html文本(經過模板渲染)內容并在頁面展示. 與用戶交互信息:js將用戶產生數據通過form表單形式或者ajax形式將數據傳輸到后臺并接收返回信息,從而達到數據交互的作用. 請求的本質 CS架構:本質上django程序就是一個socket服務端,瀏覽器其實就是一個socket客戶端. django自帶的wsgi模塊處理瀏覽器的請求信息,用戶只需要實現路由和...

    Django框架及使用

    WEB與服務器 WEB : 表示用戶可以瀏覽的網頁內容(HTML,css,JS) 服務器 : 能夠給用戶提供服務的機器 硬件與軟件 硬件范疇:一臺機器 軟件范疇:一個能夠接收用戶請求并給出響應的程序 APACHE TOMCAT IIS Nginx … … 作用 存儲web所需要信息(HTML,圖片,文件,音頻,JS/css) 能夠處理用戶的請求(request),并給出...

    Python Web框架——Django

    使用框架簡單快速開發特定的系統。 一 MVC和MTV模式   二 簡介 Django時有Python開發的一個免費的開源網站框架,可以用于快速搭建高性能、優雅的網站。 Django框架的特點: 強大的數據庫功能 自帶強大的后臺功能 通過正則匹配隨意定義的網址 強大易擴展的模板系統 緩存系統 國際化 三 Django安裝方式 1.利用pip安裝Django。 2.利用源碼包安裝Django...

    Django框架介紹

    Django框架介紹 MVC、MPV模型介紹 MVC模型 MTV模型 Django下載與創建新項目 Django下載 創建一個Django項目 創建一個Django應用 啟動Django項目 Django簡單學習 Django目錄分析 render方法分析 HttpRespone方法分析 request類分析 靜態文件配置 路由控制 re_path path 分發 反向解析 使用reverse在p...

    猜你喜歡

    django框架功能探索

    1.如何創建一個django項目?(基于windows) 版本:1.11 注意事項: 主機名不要使用中文 項目名不要使用中文 一個pycharm窗口只放一個工程(項目) # 命令行創建 命令行創建不會自動創建templates文件(存放html文件)。 命令行創建要手動添加templates的路徑(settings文件下): # pycharm創建  # 各文件用途 項目名文件: : 應...

    web框架之Django

    web框架和Django流程 1.web框架要點 1.Web應用程序處理流程 2.Web應用程序框架的意義 用于搭建Web應用程序 免去不同Web應用相同代碼部分的重復編寫,只需關心Web應用核心的業務邏輯實現 3.web應用程序的本質 接收并解析HTTP請求,獲取具體的請求信息 處理本次HTTP請求,即完成本次請求的業務邏輯處理 構造并返回處理結果——HTTP響應 4.w...

    Django框架(1)

    1、django的簡介 瀏覽器與服務器之間遵循的一個協議: HTTP協議 服務器與應用程序框架之間:wsgi 1.1 Django的簡介 Django是一個重量型框架 主要目的:簡便快捷開發 Django基于MVC模式,但是它是MVT模式的 核心:解耦(高內聚,低耦合) MVC設計的框架 (1)重量級框架 (2)MVT模式 MVC : 定義: MVC全名是Model View Controller...

    Django 框架全面介紹

    Django框架全面講 Python的WEB框架有Django、Tornado、Flask 等多種,Django相較與其他WEB框架其優勢為:大而全,框架本身集成了ORM、模型綁定、模板引擎、緩存、Session等諸多功能。 本文將以下方面帶大家全面了解Django框架,筆者使用的版本為1.10. 流程 基本配置 路由系統 視圖view 模板 Model 中間件 Form 認證系統 CSRF 分頁...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    精品国产乱码久久久久久蜜桃不卡