- 编写要求登录的装饰器
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'))
