flask项目流程(三)

本文介绍Flask项目的任务模块编写,包括如何处理RuntimeError关于应用上下文的问题,强调不要在表单中直接进行数据库操作。讨论了表单的创建,特别是choices的添加应在视图函数中完成,以及分页展示视图的实现。同时,讲解了flask-sqlalchemy的使用,并给出list、编辑任务视图的示例。在开发过程中遇到的form.validate_on_submit()始终为False的问题和SelectField的验证问题也进行了分析。此外,还涵盖了状态更改、分类详情的视图函数及其可能出现的错误处理。
摘要由CSDN通过智能技术生成

flask项目流程(三)

  • 任务模块的编写
url_for传递参数方式
{
  { url_for('task.status',code=1) }}

报错:

RuntimeError: No application found. Either work inside a view function or push an application context. See htt
p://flask-sqlalchemy.pocoo.org/contexts/.

尽量不要再表单中执行数据库模型操作,将该操作转移至视图函数中

  • 添加任务表单的制作
# forms.py
class AddTaskForm(FlaskForm):
    content = TextAreaField(label='内容', validators=[DataRequired()])
    add_time = DateTimeField('添加日期', default=datetime.utcnow)
    category = SelectField(label='类别', coerce=int, choices='', validators=[DataRequired()])
    submit = SubmitField('添加')
    
note:
# coerce=int html中的表单都是字符串类型,coerce使得在进行提交验证的时候转换为int类型
  • choices的添加放在视图函数部分
# views.py
def add():
    form = AddTaskForm()
    categories = Category.query.filter_by(user_id=current_user.id)
    if categories:
        form.category.choices = [(category.id, category.name) for category in categories]
    else:
        form.category.choices = [(-1, '请先创建分类')]
  	#…………
    return render_template('task/add.html', form=form)
  • 分页展示的视图编写

  • flask-sqlchemy的使用

文档地址:https://flask-sqlalchemy.palletsprojects.com/en/2.x/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HbCRJSC4-1590067379381)(C:\Users\小木人\AppData\Roaming\Typora\typora-user-images\image-20200521100317859.png)]

  • list视图函数
# views.py
@task.route('/list')
def list():
    # 从url传递的参数中获取数据page,html传过来的数据为字符串类型,需要转化为int
    page = int(request.args.get('page'))
    # paginat返回的是一个分页对象
    tasksPagination = Task.query.filter_by(user_id=current_user.id).paginate(page=page, per_page=3)
    # 获取分页中的元素 the items for the current page
    tasks = tasksPagination.items
    return render_template(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值