Flask项目实战-发布问答页面功能实现

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为空,因为没有登录发布的

后面会做限制未登录不能发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值