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(