模型分离(选做)
模型分离--让代码更方便管理
新建models.py,将模型定义全部放到这个独立的文件中。
新建exts.py,将db = SQLAlchemy()的定义放到这个独立的文件中。
models.py和主py文件,都从exts.py中导入db。
在主py文件中,对db进行始化,db.init_app(app)。
models.py
from datetime import datetime from werkzeug.security import generate_password_hash,check_password_hash from exts import db class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True, autoincrement=True) Username = db.Column(db.String(20), nullable=False) # Password = db.Column(db.String(20), nullable=False) _Password=db.Column(db.String(200), nullable=False)#内部使用 Telphone = db.Column(db.String(20), nullable=True) @property def Password(self): return self._Password#取值 @Password.setter def Password(self,row_password): self._Password=generate_password_hash(row_password) def check_password(self,row_password): result=check_password_hash(self._Password,row_password) return result class Question(db.Model): __tablename__ = 'question' id = db.Column(db.Integer, primary_key=True, autoincrement=True) author_id = db.Column(db.Integer,db.ForeignKey('user.id')) title = db.Column(db.String(100), nullable=False) detail = db.Column(db.Text, nullable=False) creat_time = db.Column(db.DateTime, default=datetime.now) author = db.relationship('User', backref=db.backref('question')) class Comment(db.Model): __tablename__ = 'comment' id = db.Column(db.Integer, primary_key=True, autoincrement=True) author_id = db.Column(db.Integer,db.ForeignKey('user.id'))#外键 question_id=db.Column(db.Integer,db.ForeignKey('question.id'))#外键 detail = db.Column(db.Text, nullable=False) creat_time = db.Column(db.DateTime, default=datetime.now) question=db.relationship('Question',backref=db.backref('comments',order_by=creat_time.desc))# author = db.relationship('User', backref=db.backref('comments')) # db.create_all()
exts.py
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy()
主py
db.init_app(app)#初始化
from decorates import login_re
decorates.py
from flask import Flask, render_template, request, redirect, url_for, session from functools import wraps def login_re(func): @wraps(func) def wrapper(*args, **kwargs): if session.get('user'): return func(*args, **kwargs) else: return redirect(url_for('login')) return wrapper

浙公网安备 33010602011771号