1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| from flask import Flask,url_for,redirect,render_template from flask_sqlalchemy import SQLAlchemy import os from flask import session from flask_wtf import FlaskForm from wtforms import StringField,SubmitField from wtforms.validators import DataRequired from flask_bootstrap import Bootstrap from flask_migrate import Migrate
app = Flask(__name__) base_model = Bootstrap(app) app_db = SQLAlchemy(app) migrate = Migrate(app,app_db)
db_dir = os.path.dirname(__file__) app.config["SECRET_KEY"] = "TOMMONKEY" app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///"+os.path.join(db_dir, "data.sqlite") app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
# 定义数据库模型 class Role(app_db.Model): __tablename__ = "role" id = app_db.Column(app_db.Integer, primary_key=True) name = app_db.Column(app_db.String(64), unique=True) # unique:该列不允许出现重复的值
# 定义关系: users = app_db.relationship("User",backref="role")
def __repr__(self): return "<role %r>" % self.name
# 定义数据库模型 class User(app_db.Model): __tablename__ = "user" id = app_db.Column(app_db.Integer,primary_key=True) username = app_db.Column(app_db.String(64), unique=True, index=True)
# 定义外键,这里的role_id即为role表中的id role_id = app_db.Column(app_db.Integer,app_db.ForeignKey("role.id")) # 看清楚,这里是role.id,不是role_id
def __repr__(self): return "<role %r>" % self.username
class NameForm(FlaskForm): id = StringField(u"input your ID", validators=[DataRequired("Must input something")]) name = StringField(u'input your name', validators=[DataRequired('must input something')]) submit = SubmitField('Submit')
# 集成pthonshell:shell上下文处理器,为了解决每次运行时都要收到进入shell导入模型和实列这种重复的工作 @app.shell_context_processor def make_shell_comtent(): return dict(db=app_db,User=User,Role=Role)
# 视图中操作数据库 @app.route("/queryUser",methods=['GET','POST']) def queryUser(): nameform = NameForm() if nameform.validate_on_submit(): if nameform.name.data is not None: # 如果数据库中查不到该用户,就注册一个 username = User.query.filter_by(username=nameform.name.data).first() if username is None: new_user = User(username=nameform.name.data) app_db.session.add(new_user) app_db.session.commit() session['known'] = False else: session['known'] = True session['name'] = nameform.name.data nameform.name.data = "" return redirect(url_for("queryUser")) else: return render_template("queryUser.html",form=nameform) return render_template("queryUser.html",form=nameform,name=session.get("name"),known=session.get("known",False))
if __name__ == "__main__": make_shell_comtent() app.run(debug=True,host="127.0.0.1",port=5000)
|