1.发布问答页面渲染
在qa.py中创建函数
from flask import Blueprint,request,render_template
# /
bp = Blueprint("qa",__name__,url_prefix="/")
# http://127.0.0.1:5000
@bp.route("/")
def index():
return "首页"
@bp.route("/qa/public",methods=['GET','POST'])
def public_question():
if request.method == 'GET':
return render_template("public_question.html")
改造public_question.html
{% extends "base.html" %}
{% block title %}问答平台-发布问答{% endblock %}
{% block head %}{% endblock %}
{% block body %}
<div class="row" style="margin-top: 20px;">
<div class="col"></div>
<div class="col-10">
<h1 style="text-align: center;">发布问答</h1>
<form action="#" method="post">
<div class="form-group">
<input type="text" name="title" class="form-control" placeholder="请输入标题">
</div>
<div class="form-group">
<textarea name="content" class="form-control" rows="10" placeholder="请输入内容"></textarea>
</div>
<div class="form-group" style="text-align: right;">
<button class="btn btn-primary">发布</button>
</div>
</form>
</div>
<div class="col"></div>
</div>
{% endblock %}
测试访问
http://127.0.0.1:5000/qa/public
2.创建问题模型
在models.py中创建问题的模型
class QuestionModel(db.Model):
__tablename__ = "question"
id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 字段id,整型,主键,自增
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=False)
create_time = db.Column(db.DateTime, default=datetime.now)
#外键
author_id = db.Column(db.Integer,db.ForeignKey("user.id"))
author = db.relationship(UserModel,backref="questions")
创建后运行同步数据库的命令
flask db migrate
flask db upgrade
查看数据库是否创建了question表
3.创建发布问答的表单验证
在forms.py添加如下代码
class Questionform(wtforms.Form):
title = wtforms.StringField(validators=[Length(min=3, max=100, message="标题格式错误!")])
content = wtforms.StringField(validators=[Length(min=3, message="标题格式错误!")])
4.更改发布问答代码
from flask import Blueprint,request,render_template,redirect,url_for,g
from .forms import Questionform
from models import QuestionModel
from exts import db
# /
bp = Blueprint("qa",__name__,url_prefix="/")
# http://127.0.0.1:5000
@bp.route("/")
def index():
return "首页"
@bp.route("/qa/public",methods=['GET','POST'])
def public_question():
if request.method == 'GET':
return render_template("public_question.html")
else:
form = Questionform(request.form)
if form.validate():
title = form.title.data
content = form.content.data
question = QuestionModel(title=title,content=content,author=g.user)
db.session.add(question)
db.session.commit()
return redirect("/")
else:
print(form.errors)
return redirect(url_for("qa.public_question"))
更改public_question.html中form的POST地址
actions删掉就是默认向当前地址发送POST请求
<form method="post">
5.测试发布问答
访问http://127.0.0.1:5000/qa/public
测试发布成功跳转到首页
数据库里面也会显示发布的数据
可以看到author_id为空,因为没有登录发布的
后面会做限制未登录不能发布