flask表单处理_html表单的提交方法

flask表单处理_html表单的提交方法这里介绍一下Flask表单提交相关的方法,还是以代码实例为主。首先,Flask模板中表单提交代码与我们一般写的H5表单无异,当然,Flask也提供了表单类,Flask-WTF扩展。这里只介绍常规的表单提交方法。首先是模板类:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"&g…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

这里介绍一下Flask表单提交相关的方法,还是以代码实例为主。

首先,Flask模板中表单提交代码与我们一般写的H5表单无异,当然,Flask也提供了表单类,Flask-WTF扩展。这里只介绍常规的表单提交方法。

首先是模板类:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>from_test</title>
</head>
<body>
{% if name %}
    {
  
  { name }}
{% else %}
<form method="post" action="login">
    Name:<input type="text" name="name"/>
    PassWord:<input type="password" name="password"/>
    <input type="submit" value="Submit"/>
</form>
{% endif %}
</body>
</html>

处理程序:

from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def index():
    return render_template('test1.html')

@app.route('/login', methods=['post'])
def login():
    name = request.form.get('name')
    password = request.form.get('password')
    if name == 'admin' and password == '123':
        return render_template('test1.html', name=name)
    return render_template('test1.html')

if __name__ == '__main__':
    app.run(debug=True)
当验证成功后,页面显示登录者的名字信息。验证失败则继续显示登录页面。

但以上程序有一个问题,当提交信息后,地址栏显示信息如下:

flask表单处理_html表单的提交方法

如果此时点击刷新按钮,那么会出现以下提示:

flask表单处理_html表单的提交方法

这不太友好,要解决这个问题可以使用重定向,Flask提供了redirect函数,用法如下:

@app.route('/login', methods=['get', 'post'])
def login():
    name = request.form.get('name')
    password = request.form.get('password')
    if name == 'admin' and password == '123':
        return redirect(url_for('login'))
    return render_template('test1.html')

当我们登录成功后,此时用户刷新页面也没有任何问题,但是名字没有传递到页面。那么这时就要和会话session一块儿使用来保证重定向后信息不被丢失。

用法如下:

@app.route('/login', methods=['get', 'post'])
def login():
    name = request.form.get('name')
    password = request.form.get('password')
    if name == 'admin' and password == '123':
        session['name'] = name
        return redirect(url_for('login'))
    return render_template('test1.html', name=session.get('name'))
我这边用的是python2.7,在直接使用时出现一些错误提示:
the session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret

提示比较明显,没有设置密钥导致了session不可用,为了安全起见,也应该设置一个密钥,Flask提供了密钥设置的方法:app.config[‘SECRET_KEY’]
设置密钥可以有效防止跨站请求伪造的攻击。

解决办法是在代码中加入:

app.config['SECRET_KEY'] = 'myproject'app.secret_key = 'myproject'
当然,通常不同的程序使用不同的密钥,并且密钥应该保存在环境变量中,而不是这样直接写。

在进行表单提交操作时,如果我们写错了用户名或者密码,页面往往会给出提示,Flask提供了很方便的操作,即使用Flash消息。

这里做一个简单的用户不存在提示(只是演示Flash用法,用户名密码分开提示是不安全的)

@app.route('/login', methods=['get', 'post'])
def login():
    name = request.form.get('name')
    password = request.form.get('password')
    if name == 'admin' and password == '123':
        session['name'] = name
        return redirect(url_for('login'))
    if name != 'admin':
        flash('no this name')
    return render_template('test1.html', name=session.get('name'))

页面模板中消息提示的代码:

{% for message in get_flashed_messages() %}
    {
  
  { message  }}
{% endfor %}
现在应该是可以了,这里我本人使用的是python2.7,如果消息提示为中文,可能此时会遇到一个编码错误,信息:
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position 0: ordinal not in range(128)

原因是读取消息时,python的str默认是ascii编码,和unicode编码冲突,解决方案是加入如下代码:

import sys
reload(sys)
sys.setdefaultencoding('utf8')

大功告成!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188667.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是ARP欺骗_ARP欺骗防范

    什么是ARP欺骗_ARP欺骗防范ARP欺骗的本质是把虚假的IP-MAC映射关系通过ARP报文发给主机,让主机把虚假的IP-MAC映射存入ARP缓存表(可能是IP地址错误,也可能是MAC地址错误),让其无法正确发送数据漏洞的根源ARP协议是无连接操作系统收到ARP请求或响应后无法确认senderMAC和senderIP真假ARP欺骗伪造网关攻击者B伪造ARP报文(senderIP地址是网关的,senderMAC地址不是网关的),发送给网段内的主机A,那么主机A就会把网关的ip地址和伪造的mac地址缓存到arp缓.

    2025年7月3日
    4
  • Linux下安装tomcat8.5

    Linux下安装tomcat8.5一、在/usr/local路径下新建一个文件夹mkdirtomcat8.51二、下载tomcat8.5压缩包,上传到tomcat8.5目录中三、解压tar-zxvfapache-tomcat-8.5.24.tar.gz1四、Tomcat服务器启动1.启动Tomcat服务器…

    2022年5月29日
    203
  • eclipse汉化教程(官方汉化包,傻瓜式操作,附带中英文快捷切换方式)

    eclipse汉化教程(官方汉化包,傻瓜式操作,附带中英文快捷切换方式)eclipse汉化教程(官方汉化包,傻瓜式操作)首先到eclipseIDE中,点击‘Help’>‘Installnewsoftware…’在弹出的Install窗口中点击Add按钮Name任意填Location填https://download.eclipse.org/technology/babel/update-site/R0.18.3/2021-03/这里解释一下这个Location的出处,是在Eclipse官方的babel语言包project网页上找的,可能不是最

    2022年6月6日
    46
  • cxf实现webservice_产品框架

    cxf实现webservice_产品框架1.WebService与CXF简介1.1WebServiceWebService是一种跨编程语言和跨操作系统平台的远程调用技术。跨编程语言和跨操作平台就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。远程调用就是一台计算机a上的…

    2025年12月11日
    4
  • 用HTML+CSS做一个漂亮简单的个人网页

    用HTML+CSS做一个漂亮简单的个人网页1.刚好帮我妹写了一个作业做一个个人网页设计,简单的三个小页面,就从网上随便找了图片自己随便设计了下东拼西凑哈哈哈!!!可能有点low但是对她来说或者需要做简单的个人网站应该就够了吧!图片是从站酷上面找的(因为我不会设计图),如果有侵权了什么的请联系我立刻马上删掉哈!(首页的首屏有下雪了的特效,右下角有音乐播放提示)2.先看一下效果哈!效…

    2022年4月6日
    45
  • 【手把手】制作一个简单的HTML网页

    【手把手】制作一个简单的HTML网页新建一个html文件:我要给body添加一些样式,就在head元素上挂载一个style元素。然后,写样式表:效果:这样的话,我们就可以看到body部分了。现在,我给body添加一点padding。页面上看不出区别,让我们打开F12,看一下现在的body变成了什么样子。示意图:从图中可以看出,body元素分为三层,最里面的一层,就是520×500的那部分,这个叫做内部真实空间,也就是说,你可以在里面添加其他元素,比如div元素,p元素,a元素等等。然后中间的一层就是paddin

    2022年7月27日
    20

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号