当前位置: 首页 > news >正文

接收表单数据

如果您尝试按下提交按钮,浏览器将显示“Method Not Allowed”错误。这是因为到目前为止,前一节中的登录视图函数完成了一半的工作。它可以在网页上显示表单,但是还没有逻辑来处理用户提交的数据。这是Flask-WTF使工作变得非常简单的另一个领域。下面是view函数的更新版本,它接受并验证用户提交的数据:

app/routes.py:

from flask import render_template, flash, redirect@app.route('/login', methods=['GET', 'POST'])
def login():form = LoginForm()if form.validate_on_submit():flash('Login requested for user {}, remember_me={}'.format(form.username.data, form.remember_me.data))return redirect('/index')return render_template('login.html', title='Sign In', form=form)

当你调用flash()函数时,Flask会存储消息,但是闪现的消息不会神奇地出现在网页中。应用程序的模板需要以适用于站点布局的方式呈现这些闪烁的消息。我将把这些消息添加到基本模板中,以便所有模板都继承此功能。这是更新后的基本模板:

app/templates/base.html

<html><head>{% if title %}<title>{{ title }} - microblog</title>{% else %}<title>microblog</title>{% endif %}</head><body><div>Microblog:<a href="/index">Home</a><a href="/login">Login</a></div><hr>{% with messages = get_flashed_messages() %}{% if messages %}<ul>{% for message in messages %}<li>{{ message }}</li>{% endfor %}</ul>{% endif %}{% endwith %}{% block content %}{% endblock %}</body>
</html>

以下是在用户名和密码字段中添加了字段验证消息的登录模板:

app/templates/login.html

{% extends "base.html" %}{% block content %}<h1>Sign In</h1><form action="" method="post" novalidate>{{ form.hidden_tag() }}<p>{{ form.username.label }}<br>{{ form.username(size=32) }}<br>{% for error in form.username.errors %}<span style="color: red;">[{{ error }}]</span>{% endfor %}</p><p>{{ form.password.label }}<br>{{ form.password(size=32) }}<br>{% for error in form.password.errors %}<span style="color: red;">[{{ error }}]</span>{% endfor %}</p><p>{{ form.remember_me() }} {{ form.remember_me.label }}</p><p>{{ form.submit() }}</p></form>
{% endblock %}

相关文章:

  • HTTP 协议详解-上(Fiddler 抓包演示)
  • 【Redis】Redis与SSM整合Redis注解式缓存Redis解决缓存问题
  • android手机平板拓展电脑屏幕
  • 删数问题 (贪心)
  • 【星海出品】flask (四) 三方工具使用
  • 2.3 矩阵消元
  • 数据结构——时间复杂度和空间复杂度
  • Go并发编程(上)
  • PLC开放式以太网通信网络状态查看工具netstat
  • git拉取项目所有分支
  • 史上第一款AOSP开发的IDE (支持Java/Kotlin/C++/Jni/Native/Shell/Python)
  • 高效的测试覆盖率:在更短的时间内最大化提高测试覆盖率
  • STM32外设系列—MPU6050角度传感器
  • Go采集代理框架
  • 2023.11.10联赛 T3题解
  • go append函数以及写入
  • If…else
  • python学习笔记-类对象的信息
  • react 代码优化(一) ——事件处理
  • Redis中的lru算法实现
  • socket.io+express实现聊天室的思考(三)
  • Vue 重置组件到初始状态
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 后端_ThinkPHP5
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 力扣(LeetCode)56
  • 前端知识点整理(待续)
  • 我感觉这是史上最牛的防sql注入方法类
  • 通过调用文摘列表API获取文摘
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #单片机(TB6600驱动42步进电机)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (C++17) optional的使用
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (js)循环条件满足时终止循环
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (WSI分类)WSI分类文献小综述 2024
  • (zt)最盛行的警世狂言(爆笑)
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (转)Sublime Text3配置Lua运行环境
  • (转)visual stdio 书签功能介绍
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .bat批处理出现中文乱码的情况
  • .chm格式文件如何阅读
  • .Net Core与存储过程(一)
  • .Net Web窗口页属性
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET 中创建支持集合初始化器的类型
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?