Flask 기반 웹 애플리케이션의 탄생은 일곱 번째 기사입니다. 이 기사는 주로 조직 구조의 조정을 소개하며 관심 있는 친구는
지금 모든 Py를 참조할 수 있습니다. 모두 default.py 파일에 작성됩니다. 분명히 이 방법에서는 프로그램이 책임을지게 되면 개발과 유지 관리 모두에 많은 문제가 발생합니다.
Flask 프레임워크는 프로젝트에 특정 조직 구조를 사용하도록 강요하지 않으므로 여기서 사용되는 조직 구조가 반드시 다른 프로젝트의 조직 구조와 동일할 필요는 없습니다.
default.py의 코드에 따르면 크게 폼 모델, 데이터 모델, 뷰 메서드 3가지로 구분할 수 있으므로 모델도 이것으로 구분합니다. 범주. 따라서 다른 언어(java)에서 얻은 경험에 따르면 각 클래스는 py 파일이며 해당 폴더
에 단일 파일에 배치되며, 모든 구성은 모두 단일 파일에 작성됩니다. 다중 파일 재구성을 수행한 후에는 분명히 부적절하므로 독립적인 구성 파일을 생성해야 합니다:
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의 영역과 다소 유사하며, 다양한 모듈의 보기 방법을 통합하고 URL을 통해 구별합니다. , 먼저 입구, 즉 인덱스 페이지를 메인 설계도로 정의합니다. 방법은 다음과 같습니다.
메인 폴더를 생성합니다
폴더에 새 Blueprint 초기화 파일을 생성_ _init__.py
뷰 메서드 파일 view.py 생성
오류 페이지 생성 view methoderrors.py
<🎜 in the main blueprint >
from flask import Blueprint main=Blueprint("main",__name__) # 创建蓝本 from . import errors,views
from flask import render_template from . import main @main.route("/") def index(): return render_template("index.html",site_name='myblog')
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))
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("登录")
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"))
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
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()
위 내용은 조직구조 조정 상세예(파이썬)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!