@app.route('/')
def index():
context = {
'questions': Question.query.order_by(text("-create_time")).all()
}
return render_template('index.html', **context)
需要从sqlalchemy导入text函数
from flask import Flask, render_template, request, redirect, url_for, session
from exts import db
from models import User, Question
from flask_migrate import Migrate
from functools import wraps
from decorators import login_required
import config
# 导入text函数
from sqlalchemy import text
参考
https://blog.csdn.net/vonhehe/article/details/95756567
app代码
from flask import Flask, render_template, request, redirect, url_for, session
from exts import db
from models import User, Question
from flask_migrate import Migrate
from functools import wraps
from decorators import login_required
import config
from sqlalchemy import text
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
migrate = Migrate(app, db)
@app.route('/')
def index():
context = {
'questions': Question.query.order_by(text("-create_time")).all()
}
return render_template('index.html', **context)
@app.route('/login/', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
telephone = request.form.get('telephone')
password = request.form.get('password')
user = User.query.filter(User.telephone == telephone, User.password == password).first()
if user:
session['user_id'] = user.id
# 如果想在31天内都不需要登录
session.permanent = True
return redirect(url_for('index'))
else:
return '手机号或密码错误,请确认后再登录'
@app.route('/logout/')
def logout():
# session.pop('user_id')
# del session['user_id']
session.clear()
return redirect(url_for('login'))
@app.route('/question/', methods=['GET', 'POST'])
@login_required
def question():
if request.method == 'GET':
return render_template('question.html')
else:
title = request.form.get('title')
content = request.form.get('content')
question = Question(title=title, content=content)
user_id = session.get('user_id')
user = User.query.filter(User.id == user_id).first()
question.author = user
db.session.add(question)
db.session.commit()
return redirect(url_for('index'))
@app.route('/register/', methods=['GET', 'POST'])
def register():
if request.method == 'GET':
return render_template('register.html')
else:
telephone = request.form.get('telephone')
username = request.form.get('username')
password1 = request.form.get('password1')
password2 = request.form.get('password2')
# 验证手机号码,如果被注册,就不能注册了
user = User.query.filter(User.telephone == telephone).first()
if user:
return '该手机号码已被注册,请更换手机号码'
else:
# password1 should equal password2
if password1 != password2:
return '两次密码不一致,请核对后再填写'
else:
user = User(telephone=telephone, username=username, password=password1 )
db.session.add(user)
db.session.commit()
return redirect(url_for('login'))
@app.context_processor
def my_context_processor():
user_id = session.get('user_id')
if user_id:
user = User.query.filter(User.id == user_id).first()
if user:
return {'user':user}
else:
return {}
if __name__ == '__main__':
app.run()