- 编写要求登录的装饰器
from functools import wraps
def loginFirst(func): #参数是函数
@wraps(func)
def wrapper(*args, ** kwargs): #定义个函数将其返回
1 def loginFirst(func): 2 # 定义一个函数将其返回 3 @wraps(func) 4 def wrapper(*args,**kwargs): 5 if session.get('title'): 6 return func(*args, **kwargs) 7 else: 8 return redirect(url_for('login')) 9 # 返回一个函数10 return wrapper
#要求登录
return func(*args, ** kwargs)
return wrapper #返回一个函数
- 应用装饰器,要求在发布前进行登录,登录后可发布。
@app.route('/question/',methods=['GET','POST']) @loginFirst def question():
1 #发布问答 2 @app.route('/question' , methods=['GET','POST']) 3 @loginFirst 4 def question(): 5 if request.method == 'GET': 6 return render_template('question.html') 7 else: 8 book_title = request.form.get('title') 9 book_content = request.form.get('content')10 user_id = request.form.get('user_id')11 book = Book(id='1', title=book_title, content=book_content, author_id=user_id)12 db.session.add(book) # 加入数据库13 db.session.commit()14 return redirect(url_for('index'))
- 建立发布内容的对象关系映射。
class Question(db.Model):
- 完成发布函数。
1 class Question(db.Model): 2 __tablname__ = 'question' 3 id = db.Column(db.String(17), primary_key=True) # 数据库唯识别id 4 title = db.Column(db.String(30)) #文章标题 5 abstracts = db.Column(db.String(30)) #文章摘要 6 content = db.Column(db.TEXT) #文章内容 7 createdate = db.Column(db.DATETIME) #发布时间 8 author_id = db.Column(db.String(17),db.ForeignKey('user.id')) #发布者id 9 size = db.Column(db.String(30)) #文章长度10 chilk = db.Column(db.String(30)) #阅读数11 disc = db.Column(db.String(30))12 classification = db.Column(db.String(17),db.ForeignKey('classification.id')) #文章分类id13 authorClass = db.relationship('User',backref=db.backref('book'))14 classificationClass = db.relationship('Classification',backref=db.backref('book'))