Heim > Artikel > Backend-Entwicklung > Detailliertes Beispiel für die Anpassung der Organisationsstruktur (Python)
Die Geburt einer flaschenbasierten Webanwendung ist der siebte Artikel, der hauptsächlich die Anpassung der Organisationsstruktur vorstellt und einen gewissen Referenzwert hat.
Alle Py-Codes sind Alles in der Datei default.py geschrieben. Sobald das Programm verantwortlich ist, verursacht es natürlich viele Probleme sowohl bei der Entwicklung als auch bei der Wartung.
Das Flask-Framework zwingt Projekte nicht dazu, eine bestimmte Organisationsstruktur zu verwenden, daher ist die hier verwendete Organisationsstruktur nicht unbedingt dieselbe wie in anderen Projekten.
Gemäß dem Code in default.py kann es grob in drei Kategorien unterteilt werden: Formularmodell, Datenmodell und Ansichtsmethode, sodass Modelle auch dadurch unterschieden werden Kategorie. Daher ist nach den Erfahrungen aus anderen Sprachen (Java) jede Klasse eine Py-Datei und wird im entsprechenden Ordner abgelegt
In einer einzigen Datei, Alle Konfigurationen werden alle in eine einzige Datei geschrieben, und nach der Rekonstruktion mehrerer Dateien ist dies offensichtlich unangemessen, daher ist es notwendig, eine unabhängige Konfigurationsdatei zu erstellen:
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"
Dann initialisieren Sie die Datei (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
Eine weitere Modularisierung erfordert die Verwendung von Blueprints. Die Funktionen von Blueprints ähneln in gewisser Weise den Bereichen in asp.net mvc und integrieren die Ansichtsmethoden verschiedener Module URL, zuerst wird der Eingang, also die Indexseite, als Hauptblaupause definiert. Die Methode ist wie folgt:
Erstellen Sie den Hauptordner
Erstellen Sie einen neuen Ordner in der Blueprint-Initialisierungsdatei __init__.py
Ansichtsmethodendatei view.py erstellen
Fehlerseitenansichtsmethode erstellen Fehler.py
from flask import Blueprint main=Blueprint("main",__name__) # 创建蓝本 from . import errors,viewsDerzeit verfügt die Ansichtsmethodendatei nur über eine Indexmethode , der Code lautet wie folgt:
from flask import render_template from . import main @main.route("/") def index(): return render_template("index.html",site_name='myblog')Der Fehlerseitencode wird abgekürzt als Die URL des Haupt-Blueprints verwendet nicht das Präfix Dann die Anmeldung , Registrierungs- und Abmeldeseiten sind im Berechtigungs-Blueprint (Authentifizierung) konzentriert. Der Berechtigungs-Blueprint-Initialisierungscode lautet wie folgt:
from flask import Blueprint auth=Blueprint("auth",__name__) from . import viewsDie Ansicht wird hauptsächlich aus der zuvor abgeschlossenen Ansicht migriert:
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))Achten Sie auf die beiden mit einem Sternchen markierten Zeilen. Achten Sie unbedingt auf die py-Datei und das py-Objekt. Das Objekt muss in die Datei importiert werden.
Der Code in der LoginForm-Datei lautet wie folgt :
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("登录")Der Code in der Benutzerdatei lautet wie folgt:
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"))Beachten Sie, dass das Flask-Plug-In von flask.ext importiert wird.* Wechseln Sie zur Methode flask_* Von der neuen Version empfohlen. Ich möchte mich bei meinem Bloggerkollegen Zhi Dian Xiaobaicai für die Erinnerung bedanken. Natürlich muss der Blueprint am Ende registriert werden, daher lautet der endgültige Code der Methode 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 appDie letzte Änderung ist die Möglichkeit, den Vorgang zu starten, eine zu erstellen Neue Datei „manager.py“ und Konfiguration. Der Startcode lautet wie folgt:
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()Verwenden Sie die einfachste Art, ihn auszuführen. Das Ergebnis ist das gleiche wie bei der Verwendung von „default.py“. Das Systemverzeichnis lautet derzeit nur zu Referenzzwecken wie folgt:
Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel für die Anpassung der Organisationsstruktur (Python). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!