国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

一個基于flask的web應(yīng)用誕生 組織結(jié)構(gòu)調(diào)整(7)

2020-02-23 04:33:23
字體:
供稿:網(wǎng)友

現(xiàn)在所有的Py代碼均寫在default.py文件中,很明顯這種方法下,一旦程序變的負(fù)責(zé),那么無論對于開發(fā)和維護來說,都會帶來很多問題。

Flask框架并不強制要求項目使用特定的組織結(jié)構(gòu),所以這里使用的組織結(jié)構(gòu)并不一定與其它項目中相同。

根據(jù)default.py中的代碼,大體可分為三類:表單模型,數(shù)據(jù)模型,視圖方法,所以模型也網(wǎng)這類中來區(qū)分。所以按照其他語言(java)得來的經(jīng)驗,每個類為一個py文件,放到相應(yīng)的文件夾中

在單個文件中,所有的配置都寫在單個的文件里,而在進行多文件重構(gòu)之后,還這樣做很明顯是不合適的,所以創(chuàng)建一個獨立的config文件很有必要:

class Config: SECRET_KEY="Niu_blog String" SQLALCHEMY_DATABASE_URI='mysql://root:1234@localhost/cblog' SQLALCHEMY_COMMIT_ON_TEARDOWN=True LOGIN_PROTECTION="strong" LOGIN_VIEW="login"

然后是初始化文件(app/__init__.py):

from flask import Flaskfrom flask_bootstrap import Bootstrapfrom flask_sqlalchemy import SQLAlchemyfrom flask_login import LoginManagerimport pymysqlpymysql.install_as_MySQLdb()from config import Configbootstrap = Bootstrap()db = SQLAlchemy()login_manager=LoginManager();def create_app(): app = Flask(__name__) app.config.from_object(Config) bootstrap.init_app(app) login_manager.init_app(app) login_manager.session_protection=Config.LOGIN_PROTECTION login_manager.login_view=Config.LOGIN_VIEW db.init_app(app) return app

進一步模塊化還要使用藍本,藍本的功能有些類似 asp.net mvc中的area,將不同模塊的視圖方法整合到一起,并通過url進行區(qū)分,首先入口即index頁面定義為main藍本,方法如下:

創(chuàng)建main文件夾 文件夾內(nèi)新建藍本初始化文件__init__.py 創(chuàng)建視圖方法文件view.py 主藍本內(nèi)創(chuàng)建錯誤頁視圖方法errors.py

初始化文件代碼如下:

from flask import Blueprintmain=Blueprint("main",__name__) # 創(chuàng)建藍本from . import errors,views

目前,視圖方法文件只有一個index方法,代碼如下:

from flask import render_templatefrom . import main@main.route("/")def index(): return render_template("index.html",site_name='myblog')

錯誤頁代碼略

主藍本的的URL不使用前綴

然后登陸注冊登出頁集中到權(quán)限藍本(auth),權(quán)限藍本初始化代碼如下:

from flask import Blueprintauth=Blueprint("auth",__name__)from . import views

 視圖主要為之前已經(jīng)完成的視圖遷移過來:

from . import authfrom .. import db,login_managerfrom ..forms.LoginForm import LoginForm(*)from ..models.User import User (*)from flask_login import login_user,logout_userfrom flask import render_template,flash,redirect,url_for@auth.route("/login",methods=["GET","POST"])def login(): form = LoginForm() print(url_for("main.index")) if form.validate_on_submit():  username = form.username.data  password = form.password.data  print(User)  user = User.query.filter_by(username=username, password=password).first()  if user is not None:   login_user(user, form.remember_me.data)   print(url_for("main.index"))   return redirect(url_for("main.index"))  else:   flash("您輸入的用戶名或密碼錯誤")   return render_template("/auth/login.html", form=form) # 返回的仍為登錄頁  return redirect(url_for("main.index")) return render_template("/auth/login.html",form=form)@auth.route("/logout",methods=["GET","POST"])def logout(): logout_user() return redirect(url_for("main.index"))@login_manager.user_loaderdef load_user(user_id): return User.query.get(int(user_id))            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 来凤县| 鲁甸县| 武城县| 扶风县| 望奎县| 祁门县| 上高县| 抚宁县| 陆丰市| 茌平县| 监利县| 无锡市| 舞钢市| 安阳市| 呼伦贝尔市| 榆林市| 苍梧县| 惠安县| 平泉县| 黄梅县| 元朗区| 息烽县| 西乌珠穆沁旗| 阿鲁科尔沁旗| 稷山县| 平舆县| 扎鲁特旗| 于田县| 马尔康县| 河西区| 聂荣县| 全州县| 涞源县| 临潭县| 邻水| 安徽省| 仁化县| 滦南县| 宁都县| 宣恩县| 滁州市|