- 编写要求登录的装饰器
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\')) #文章分类id 13 authorClass = db.relationship(\'User\',backref=db.backref(\'book\')) 14 classificationClass = db.relationship(\'Classification\',backref=db.backref(\'book\'))