问答平台项目结构搭建
先创建一个配置文件config.py,后面有些配置写在这里
#app.py
from flask import Flask
import config
app = Flask(__name__)
#绑定配置文件
app.config.from_object(config)
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
if __name__ == '__main__':
app.run()
再新建一个exts.py和models.py
#exts.py
#flask-sqlalchemy
from flask_sqlalchemy import SQLAlchemy
db=SQLAlchemy()
#models.py
from exts import db
class UserModel(db.Model):
pass
#app.py
from flask import Flask
import config
from exts import db
from models import UserModel
app = Flask(__name__)
#绑定配置文件
app.config.from_object(config)
#可以让你先创建,再绑定
db.init_app(app)
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
if __name__ == '__main__':
app.run()
防止循环引用,如果不加exts.py会导致下面这种情况
加了就可以变成这样子
下面设置蓝图,用来做模块化的
再在这里新建两个py文件,一个是auth.py和授权相关的,一个是qa.py和问答相关的
#auth.py
from flask import Blueprint
# /auth,后面所有的路由都是以这个开头,比如/auth/login
bp=Blueprint("auth",__name__,url_prefix="/auth")
@bp.route("/login")
def login():
pass
#qa.py
from flask import Blueprint
bp=Blueprint("qa",__name__,url_prefix="/")
@bp.route("/")
def index():
pass
再在app.py中导入和绑定
#app.py
from flask import Flask
import config
from exts import db
from models import UserModel
from blueprints.qa import bp as qa_bp
from blueprints.auth import bp as auth_bp
app = Flask(__name__)
#绑定配置文件
app.config.from_object(config)
#可以让你先创建,再绑定
db.init_app(app)
app.register_blueprint(qa_bp)
app.register_blueprint(auth_bp)
if __name__ == '__main__':
app.run()
User模型创建
先在navicat里新建数据库
#config.py
# 数据库的配置信息
HOSTNAME = '127.0.0.1'
PORT = '3306'
USERNAME = 'root'
PASSWORD = '123456'
DATABASE = 'zhiliaooa_course'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI
#model.py
from exts import db
from datetime import datetime
class UserModel(db.Model):
__tablename__ = "user"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(100), nullable=False)
password = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(100), nullable=False)
join_time = db.Column(db.DateTime, default=datetime.now)
#app.py
from flask import Flask
import config
from exts import db
from models import UserModel
from blueprints.qa import bp as qa_bp
from blueprints.auth import bp as auth_bp
from flask_migrate import Migrate
app = Flask(__name__)
# 绑定配置文件
app.config.from_object(config)
# 可以让你先创建,再绑定
db.init_app(app)
migrate = Migrate(app, db)
app.register_blueprint(qa_bp)
app.register_blueprint(auth_bp)
if __name__ == '__main__':
app.run()
然后运行三步
flask db init(只需第一次操作一下)
flask db migrate
flask db upgrade
然后数据库刷新下就可以看到