首页 后端开发 Python教程 组织结构调整的实例详解(python)

组织结构调整的实例详解(python)

Apr 26, 2017 am 11:17 AM
flask

一个基于flask的web应用诞生第七篇,这篇文章主要介绍了组织结构的调整,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

现在所有的Py代码均写在default.py文件中,很明显这种方法下,一旦程序变的负责,那么无论对于开发和维护来说,都会带来很多问题。

Flask框架并不强制要求项目使用特定的组织结构,所以这里使用的组织结构并不一定与其它项目中相同。

根据default.py中的代码,大体可分为三类:表单模型,数据模型,视图方法,所以模型也网这类中来区分。所以按照其他语言(java)得来的经验,每个类为一个py文件,放到相应的文件夹中

在单个文件中,所有的配置都写在单个的文件里,而在进行多文件重构之后,还这样做很明显是不合适的,所以创建一个独立的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 Flask
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
import pymysql
pymysql.install_as_MySQLdb()
from config import Config

bootstrap = 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进行区分,首先入口即index页面定义为main蓝本,方法如下:

  • 创建main文件夹

  • 文件夹内新建蓝本初始化文件__init__.py

  • 创建视图方法文件view.py

  • 主蓝本内创建错误页视图方法errors.py

初始化文件代码如下:

from flask import Blueprint

main=Blueprint("main",__name__) # 创建蓝本
from . import errors,views
登录后复制

目前,视图方法文件只有一个index方法,代码如下:

from flask import render_template
from . import main

@main.route("/")
def index():
 return render_template("index.html",site_name='myblog')
登录后复制

错误页代码略

主蓝本的的URL不使用前缀

然后登陆注册登出页集中到权限蓝本(auth),权限蓝本初始化代码如下:

from flask import Blueprint

auth=Blueprint("auth",__name__)
from . import views
登录后复制

视图主要为之前已经完成的视图迁移过来:

from . import auth
from .. import db,login_manager
from ..forms.LoginForm import LoginForm(*)
from ..models.User import User (*)
from flask_login import login_user,logout_user
from 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_loader
def load_user(user_id):
 return User.query.get(int(user_id))
登录后复制

注意打星号标记的两行,一定要注意py文件和py对象,必须在文件内在import对象

其中LoginForm文件内的代码如下:

from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField,BooleanField
from wtforms.validators import DataRequired

class LoginForm(FlaskForm):
 username=StringField("请输入用户名",validators=[DataRequired()])
 password=PasswordField("请输入密码")
 remember_me=BooleanField("记住我")
 submit=SubmitField("登录")
登录后复制

User文件内的代码如下:

from flask_login import UserMixin
from .. import db

class User(UserMixin,db.Model):
 __tablename__="users"
 id=db.Column(db.Integer,primary_key=True)
 username=db.Column(db.String(50),unique=True,index=True)
 password=db.Column(db.String(50))
 nickname=db.Column(db.String(50))
 email=db.Column(db.String(100))
 birthday=db.Column(db.DateTime)
 gender=db.Column(db.Integer)
 remark=db.Column(db.String(200))
 role_id=db.Column(db.Integer,db.ForeignKey("roles.id"))
登录后复制

注意一下flask插件的导入方式都由flask.ext.*改为新版本推荐的flask_*这种方式,在此感谢博友 治电小白菜的提醒。

当然,最终还要对蓝本进行注册,所以最终create_app方法的代码为:

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)
 from .main import main as main_blueprint
 from .auth import auth as auth_blueprint
 app.register_blueprint(main_blueprint)     #无url前缀
 app.register_blueprint(auth_blueprint,url_prefix="/auth") #url前缀为/auth
 return app
登录后复制

最后修改的是启动运行的方式,新建一个manager.py文件,配置启动代码如下:

from app import create_app, db
from flask_script import Manager,Shell
from flask_migrate import Migrate,MigrateCommand
from app.models.User import User
from app.models.Role import Role
import pymysql
pymysql.install_as_MySQLdb()
app=create_app()
manager=Manager(app);
migrate = Migrate(app, db)
def make_shell_context():
 return dict(app=app,db=db,User=User,Role=Role) #注册shell命令
manager.add_command("db", MigrateCommand) #新增db命令用于数据库迁移
manager.add_command("shell" ,Shell(make_context=make_shell_context()))

if __name__ =='__main__':
 manager.run()
登录后复制

用最土的方式,跑跑运行一下,运行结果与之前仅有default.py的时候相同,此时系统目录如下,仅供参考:

以上是 组织结构调整的实例详解(python)的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何利用React和Flask构建简单易用的网络应用 如何利用React和Flask构建简单易用的网络应用 Sep 27, 2023 am 11:09 AM

如何利用React和Flask构建简单易用的网络应用引言:随着互联网的发展,网络应用的需求也越来越多样化和复杂化。为了满足用户对于易用性和性能的要求,使用现代化的技术栈来构建网络应用变得越来越重要。React和Flask是两种在前端和后端开发中非常受欢迎的框架,它们可以很好的结合在一起,用来构建简单易用的网络应用。本文将详细介绍如何利用React和Flask

从头开始,逐步指导您安装Flask,快速建立个人博客 从头开始,逐步指导您安装Flask,快速建立个人博客 Feb 19, 2024 pm 04:01 PM

从零开始,手把手教你安装Flask和快速搭建个人博客作为一个喜欢写作的人来说,拥有一个个人博客是非常重要的。而Flask作为一个轻量级的PythonWeb框架,可以帮助我们快速搭建一个简洁而功能完善的个人博客。在本文中,我将从零开始,手把手教你如何安装Flask并快速搭建个人博客。第一步:安装Python和pip在开始之前,我们需要先安装Python和pi

Django vs. Flask:Python Web框架的对比分析 Django vs. Flask:Python Web框架的对比分析 Jan 19, 2024 am 08:36 AM

Django和Flask都是PythonWeb框架中的佼佼者,它们都有着自己的优点和适用场景。本文将对这两个框架进行对比分析,并提供具体的代码示例。开发简介Django是一个全功能的Web框架,它的主要目的是为了快速开发复杂的Web应用。Django提供了许多内置的功能,比如ORM(对象关系映射)、表单、认证、管理后台等。这些功能使得Django在处理大型

安装Flask框架指南:详细步骤帮助您正确安装Flask 安装Flask框架指南:详细步骤帮助您正确安装Flask Feb 18, 2024 pm 10:51 PM

Flask框架安装教程:一步步教你如何正确安装Flask框架,需要具体代码示例引言:Flask是一款简洁而灵活的PythonWeb开发框架。它易于学习、易于使用,并且具有强大的功能。本文将带领您一步步正确地安装Flask框架,并提供详细的代码示例供参考。第一步:安装Python在安装Flask框架之前,首先需要确保您的计算机上安装了Python。您可以从P

Flask和Intellij IDEA集成: Python web应用程序开发技巧(第二部分) Flask和Intellij IDEA集成: Python web应用程序开发技巧(第二部分) Jun 17, 2023 pm 01:58 PM

在第一部分介绍了基本的Flask和IntellijIDEA集成、项目和虚拟环境的设置、依赖安装等方面的内容。接下来我们将继续探讨更多的Pythonweb应用程序开发技巧,构建更高效的工作环境:使用FlaskBlueprintsFlaskBlueprints允许您组织应用程序代码以便于管理和维护。Blueprint是一个Python模块,能够包

Flask vs FastAPI: 高效开发Web API的最佳选择 Flask vs FastAPI: 高效开发Web API的最佳选择 Sep 27, 2023 pm 09:01 PM

FlaskvsFastAPI:高效开发WebAPI的最佳选择引言:在现代的软件开发中,WebAPI已经成为了不可或缺的一部分。它们能够提供数据和服务,使得不同的应用程序之间能够进行通信和互操作。而在选择开发WebAPI的框架时,Flask和FastAPI是两个备受关注的选择。这两个框架都非常流行,而且各有优势。在本文中,我们将对Fl

Flask-RESTful和Swagger: Python web应用程序中构建RESTful API的最佳实践(第二部分) Flask-RESTful和Swagger: Python web应用程序中构建RESTful API的最佳实践(第二部分) Jun 17, 2023 am 10:39 AM

Flask-RESTful和Swagger:Pythonweb应用程序中构建RESTfulAPI的最佳实践(第二部分)在上一篇文章中,我们探讨了如何使用Flask-RESTful和Swagger来构建RESTfulAPI的最佳实践。我们介绍了Flask-RESTful框架的基础知识,并展示了如何使用Swagger来构建RESTfulAPI的文档。本

使用Flask和D3.js构建交互式数据可视化Web应用程序 使用Flask和D3.js构建交互式数据可视化Web应用程序 Jun 17, 2023 pm 09:00 PM

近年来,数据分析和数据可视化已经成为了许多行业和领域中不可或缺的技能。对于数据分析师和研究人员来说,将大量的数据呈现在用户面前并且让用户能够通过可视化手段来了解数据的含义和特征,是非常重要的。为了满足这种需求,在Web应用程序中使用D3.js来构建交互式数据可视化已经成为了一种趋势。在本文中,我们将介绍如何使用Flask和D3.js构建交互式数据可视化Web

See all articles