美文网首页Python全栈开发
06.视图的HTTP请求方式

06.视图的HTTP请求方式

作者: 風行天上 | 来源:发表于2019-08-10 14:06 被阅读0次

之前示例讲解了可以通过request.args.get方法在地址栏获取一些参数,下面我们来看下怎么在视图中设置和区分HTTP请求方式。
在HTTP中常用的请求方式有GET和POST两种。
GET的意思就是客户端向一个地址发送请求,目的就是获取这个地址上的信息,目标地址向发送请求的客户端提供信息供其浏览。而POST的目的是将自己的信息提交到目标地址,一般用于客户端向服务器端发送一些数据,具体场景有注册、登录等等。
在我们定义一个视图函数时,默认情况下是被当作GET方式请求的,如果想接受POST请求,我们需要在视图函数上做一些额外的设置。
假设我们有一个前端的登录页面,文件名为login.html,页面中有三个元素(用户名、密码、提交按钮)。元素name为username、pwd、submit,用户填写完毕通过提交按钮可以将信息提交到一个handler视图函数进行进一步的处理。

# handler视图函数
@app.route('/handler/')
def handler():
    return "处理用户提交数据"

与此同时,在login页面中将form表单中的action属性指定到handler地址,说明将表单数据提交到handler,提交方式默认为GET(将我们填写的值放到地址栏里,作为键值对参数传递)。这个时候我们也可以通过地址栏可以访问到handler这个视图函数。作为用户名密码这种敏感数据,我们实际上应该使用POST方式提交。

请求方式的具体设置

将GET方式改为POST,前台需要做的工作,是要将login文件下的form表单中加一条属性method="post"告知当点击submit提交表单时,使用POST方式提交数据。如果不指定method属性,则默认为GET方式提交。

<form action="." method="post">  <!-- 使用POST方式提交数据 -->
        <p>
            用户名:<input type="text" name="username">
        </p>
        <p>
            密码:<input type="password" name="pwd">
        </p>
        <p>
            <input type="submit" value="登录">
        </p>
    </form>

如果在这个时候重新提交数据会出现Method Not Allowed提示,即当前所提交的数据是不被允许的,原因是我们只设置了前端页面使用POST方式提交数据,而后端的视图参数默认仍为GET方式。所以我们接下来要将后端视图参数一并改为POST方式接收前端提交的数据。

@app.route('/handler/', methods=['POST'])    #指定为POST
def handler():
    username = request.form.get('username', None)
    pwd = request.form.get('pwd', None)
    return f"处理用户数据:用户名{username}, 密码:{pwd}"

这个时候我们只能通过login来访问handler视图函数,而不能在地址栏中直接访问handler函数,原因是地址栏访问handler属于GET请求,而当前handler被指定为POST,所以只能通过login表单提交数据后请求访问。如果想通过地址栏访问,可以同时设置为GET、POST,即method=['POST','GET']

通过add_url_rule方法设置请求方式

app.add_url_rule('/handler/', 'handler', handler, methods=['POST'])

在同一个页面中实现GET、POST的不同处理

我们也可以在同一个页面中使用GET请求呈现表单,同时在提交表单时使用POST请求传递并且呈现数据。

@app.route('/login/', endpoint='userlogin', methods=['GET','POST'])
def login():
    if request.method == 'POST':    #当POST请求出现执行下列代码
        username = request.form.get('username', None)
        pwd = request.form.get('pwd', None)
        return f"处理用户数据:用户名{username}, 密码:{pwd}" # 呈现提交数据
    return render_template('login.html')    #GET请求时return一个login.html页面

总结:

我们可以在前端页面及后端视图函数中指定请求方式,常用的有GET、POST两种方法·。不管是通过装饰器还是app_add_rule方式实现的地址规则,都可以用method = ['GET', 'POST]来设置请求方式。

相关文章

网友评论

    本文标题:06.视图的HTTP请求方式

    本文链接:https://www.haomeiwen.com/subject/wdlrjctx.html