天天看點

Flask開發微電影網站(一)

1.用到的Flask知識

  • 1.使用整形,浮點型,路徑型,字元串型下正規表達式路由轉化器
  • 2.使用GET與POST請求,上傳檔案,cookie擷取與響應,404處理
  • 3.使用模闆自動轉義,定義過濾器,定義全局上下文處理器,Jinja2文法,包含,繼承,定義宏
  • 4.使用flask-wtf定義表單模型,字段類型,字段驗證,視圖處理表單,模闆使用表單
  • 5.使用flask-sqlachemy定義資料庫模型,對資料進行增删查改,資料遷移
  • 6.使用藍圖優化項目結構,實作微電影網站前台與背景業務邏輯
  • 7.flask部署,安裝編譯Nginx,安裝Mysql服務以及通過Nginx反向代理對視訊流媒體限制下載下傳速率,限制單個IP能發起的播放連接配接數

2.用到的視訊技術

  • 1.jwplayer播放器插件
  • 2.視訊限速限IP通路
  • 3.FLV,MP4視訊格式支援
  • 4.Nginx點播實作

3.環境說明:

開發系統:Win 7(與資料庫虛拟機以NAT方式連接配接,IP位址為:192.168.81.3)
python版本:3.6.3
開發工具:pycharm 專業版
資料庫:MariaDB 5.5.56-Server
資料庫所在系統:CentOS 7.4(IP位址為:192.168.81.10)           

4.項目模型設計

  • 使用Flask的藍圖Blueprint規劃項目結構
  • 使用Flask sqlalchemy定義和業務需求相關的資料庫模型
  • 結合MySQL資料庫生成資料表

4.1前端搭建

實作前背景html布局頁面搭建
實作Jinja2引擎文法
引入靜态資源檔案,404錯誤頁面的處理           

4.2後端開發

Flask sqlalchemy結合MySQL資料表進行增删改查操作
Flask資料分頁查詢,路由裝飾器定義,模闆中變量調用,登入會話機制,上傳檔案
Flask wtforms表單驗證,Flask自定義應用上下文,自定義權限裝飾器對管理系統進行基于角色權限的通路控制
Flask的多表關聯查詢,關鍵字模糊查詢等           

4.3網站部署

實作在CentOS伺服器上搭建Nginx+MySQL+python環境
使用Nginx反向代理多端口多程序部署微電影網站
配置Nginx流媒體通路限制參數           

5.前背景項目目錄分析:

5.1 前台(home):

資料模型:models.py
表單處理:home/forms.py
模版目錄:templates/home
靜态目錄:static           

5.2 背景(admin):

資料模型:models.py
表單處理:admin/forms.py
模版目錄:templates/admin
靜态目錄:static           

整個項目目錄如下圖所示:

Flask開發微電影網站(一)

6.使用藍圖建構項目目錄

6.1 什麼是目錄

一個應用中或跨應用制作元件和通用的模式,類似于Django中的app           

6.2藍圖的作用

将不同的功能子產品化
建構大型應用
優化項目結構
增強可讀性,易于維護           

6.3藍圖建構項目目錄

6.3.1 定義藍圖

在home目錄下的

__init__.py檔案

from flask import Blueprint
home=Blueprint('home',__name__)
import app.home.views           

在admin目錄下的

__init__.py檔案

from flask import Blueprint
admin=Blueprint('admin',__name__)
import app.admin.views                     
6.3.2 注冊藍圖

修改app目錄下的__init__.py檔案

from app.admin import admin as admin_blueprint
from app.home import home as home_blueprint

app.register_blueprint(home_blueprint)
app.register_blueprint(admin_blueprint, url_prefix='/admin')           
6.3.3 調用藍圖

home目錄下的views.py檔案

from . import home

@home.route("/register/", methods=["GET", "POST"])
def register():
    pass

@home.route("/login/", methods=['GET', 'POST'])
def login():
    pass           

admin目錄下的views.py檔案

from . import admin

@admin.route('/')
def index():
    pass

@admin.route('/login/', methods=['GET', 'POST'])
def login():
    pass