forked from hynever/zlktqa
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzlktqa.py
114 lines (100 loc) · 3.44 KB
/
zlktqa.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#encoding: utf-8
from flask import Flask
from exts import db
import flask
import config
from forms import RegistForm
from models import UserModel,QuestionModel,AnswerModel
from decorators import login_required
from sqlalchemy import or_
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
@app.route('/')
def index():
context = {
'questions': QuestionModel.query.all()
}
return flask.render_template('index.html',**context)
@app.route('/question/',methods=['GET','POST'])
@login_required
def question():
if flask.request.method == 'GET':
return flask.render_template('question.html')
else:
title = flask.request.form.get('title')
content = flask.request.form.get('content')
question_model = QuestionModel(title=title,content=content)
question_model.author = flask.g.user
db.session.add(question_model)
db.session.commit()
return flask.redirect(flask.url_for('index'))
@app.route('/d/<id>/')
def detail(id):
question_model = QuestionModel.query.get(id)
return flask.render_template('detail.html',question=question_model)
@app.route('/comment/',methods=['POST'])
@login_required
def comment():
question_id = flask.request.form.get('question_id')
content = flask.request.form.get('content')
answer_model = AnswerModel(content=content)
answer_model.author = flask.g.user
answer_model.question = QuestionModel.query.get(question_id)
db.session.add(answer_model)
db.session.commit()
return flask.redirect(flask.url_for('detail',id=question_id))
@app.route('/search/')
def search():
q = flask.request.args.get('q')
questions = QuestionModel.query.filter(or_(QuestionModel.title.contains(q),QuestionModel.content.contains(q)))
context = {
'questions': questions
}
return flask.render_template('index.html',**context)
@app.route('/login/',methods=['GET','POST'])
def login():
if flask.request.method == 'GET':
return flask.render_template('login.html')
else:
telephone = flask.request.form.get('telephone')
password = flask.request.form.get('password')
user = UserModel.query.filter_by(telephone=telephone).first()
if user and user.check_password(password):
flask.session['id'] = user.id
flask.g.user = user
return flask.redirect(flask.url_for('index'))
else:
return u'用户名或密码错误!'
@app.route('/logout/',methods=['GET'])
def logout():
flask.session.clear()
return flask.redirect(flask.url_for('login'))
@app.route('/regist/',methods=['GET','POST'])
def regist():
if flask.request.method == 'GET':
return flask.render_template('regist.html')
else:
form = RegistForm(flask.request.form)
if form.validate():
telephone = form.telephone.data
username = form.username.data
password = form.password1.data
user = UserModel(telephone=telephone,username=username,password=password)
db.session.add(user)
db.session.commit()
return flask.redirect(flask.url_for('login'))
@app.before_request
def before_request():
id = flask.session.get('id')
if id:
user = UserModel.query.get(id)
flask.g.user = user
@app.context_processor
def context_processor():
if hasattr(flask.g,'user'):
return {"user":flask.g.user}
else:
return {}
if __name__ == '__main__':
app.run()