发布功能完成。

  • 编写要求登录的装饰器

from functools import wraps

def loginFirst(func): #参数是函数

@wraps(func)

      def wrapper(*args, ** kwargs): #定义个函数将其返回

          #要求登录

          return func(*args, ** kwargs)

      return wrapper #返回一个函数

def log(func):#参数类型为函数
    @wraps(func)
    def wrapper(*args,**kwargs):
        if session.get('user'):
            return func(*args,**kwargs)
        else:
            return redirect(url_for('login'))
    return wrapper
  • 应用装饰器,要求在发布前进行登录,登录后可发布。
@app.route('/question/',methods=['GET','POST'])
@loginFirst
def question():

@app.route('/tougao',methods=['GET','POST'])
@log
def tougao():
  • 建立发布内容的对象关系映射。
class Question(db.Model):
class Tougao(db.Model):
    __tablename__='tougao'
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    userid=db.Column(db.Integer,db.ForeignKey('user.id'))
    title=db.Column(db.String(30),nullable=False)
    content=db.Column(db.String(50),nullable=True)
    time=db.Column(db.DateTime,default=datetime.now)
    author = db.relationship('User', backref=db.backref('tougao'))#通过外键,建立两个表之间的关系
  • 完成发布函数。

保存到数据库。

重定向到首页。

@app.route('/tougao',methods=['GET','POST'])
@log
def tougao():
    if request.method=='GET':
         return render_template('tougao.html')
    else:
        title=request.form.get('tougaotitle')
        content=request.form.get('tougaotext')
        id=User.query.filter(User.username==session.get('user')).first().id
        tougao=Tougao(title=title,content=content,userid=id)
        db.session.add(tougao)
        db.session.commit()
        return redirect(url_for('index'))
原文地址:https://www.cnblogs.com/Naiky/p/7920946.html