问:我想了解html表单是如何构造要发送到我的Flask服务器的数据的,所以我尝试直接从python发送表单数据。但是,我无法复制html表单在做什么。有人知道我在做什么错吗?
首先,我将这一行添加到“保存”功能中:
打印 “请求表:{}” 。格式(请求。形式)
从索引网站提交名称时,该行将显示以下内容:
Request form: ImmutableMultiDict([('name', u'Name-from-website-form')])
然后我运行了这个非常小的python程序:
---------------------------------
import json
import urllib2
url = “ http://0.0.0.0:8000/保存”
数据 = { '名称' : '来自Python的名称' }
req = urllib2 。请求(url )
urllib2 。urlopen (req , json 。转储(数据))。阅读()
---------------------------------
运行此命令时,我的flask服务器的打印行显示如下:
Request form: ImmutableMultiDict([('{"name": "name-from-python"}', u'')])
如果不清楚,该词典是从'{“ name”:“ name-from-python”}'到空字符串的映射-显然不是我想要的。
我究竟做错了什么?
[MOD:添加了```python formatting -cf]
答:首先,您正在使用Python 2吗?所述的urllib2模块被在Python 3替换为urllib.request和urllib.error。
使用Python2可以正常工作(我修改为使用端口8080并路由到formdata进行设置):
#将数据发布到烧瓶服务器上
导入 urllib
导入 urllib2
url = “ http://0.0.0.0:8080/formdata”
data = urllib 。urlencode ({ 'name' : 'name-from-python' })
content = urllib2 。urlopen (url = url , data =数据)。阅读()
您可以选择添加 print(content)
formdata 路线:
#加到app.py:
从 烧瓶 进口 请求
@ app.route ('/ FORMDATA' ,方法= ('GET' ,'POST' ))DEF FORMDATA ():尝试:打印(请求。形式),除了:打印(“ formdata:无格式” )返回重定向(url_for ('index' ))
、
运行python app.py在一个窗口中并运行“后数据到烧瓶服务器”上方在另一个窗口Python 2中的外壳,产生从烧瓶中应用以下代码:
ImmutableMultiDict([( '姓名', '名称从-蟒')])
127.0.0.1 - - [17月/ 10月/ 2015年23时27分42秒] “POST / FORMDATA HTTP / 1.1” 302 -
127.0.0.1 - - [17 / Oct / 2015 23:27:42]“ GET / HTTP / 1.1” 200-
如果您需要更多的自省,则可以在路由中添加print(dir(request))或print(dir(request.form)),save以深入了解已发布的请求内容。