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
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')오류 페이지 코드가 생략되었습니다메인 블루프린트의 URL은 접두어 를 사용하지 않고 로그인, 등록 및 로그아웃 페이지는 권한 청사진(auth)에 집중되어 있습니다. 권한 청사진 초기화 코드는 다음과 같습니다:
from flask import Blueprint auth=Blueprint("auth",__name__) from . import views뷰는 주로 Migrate 이전에 완료된 뷰입니다:
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 객체를 주의하세요. 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("登录")사용자 파일의 코드는 다음과 같습니다.
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_* 방식으로 변경되었습니다. 새 버전입니다. Yuji Electric Cabbage가 알려드립니다. 물론 마지막에 Blueprint를 등록해야 하므로 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마지막 수정은 작업을 시작하는 방식입니다. .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만 있을 때와 같습니다. 참고용으로 다음과 같습니다.
위 내용은 조직구조 조정 상세예(파이썬)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!