Django学习之路之请求与响应

 更新时间:2022年02月15日 11:42:24   作者:lishuaigell  
这篇文章主要为大家详细介绍了Django的请求与响应,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

前言

上一章节中我们讲了如何引用静态文件和模板,以及如何使用常见的Django命令等。那么这章我们就来聊聊Django是如何向浏览器发送数据,以及我们怎么来接收浏览器返回的数据的。

在这里插入图片描述

请求

什么是request

在我们的视图函数中,每一个函数都有一个request参数,那么这个request是什么呢?request是一个对象,封装了用户通过浏览器或爬虫等发送过来的所有请求相关的数据。 注意,这里的 request 并不是 python requests模块里面的。

GET与POST

GET与POST都是一种请求方式,一般我们在浏览器输入一个网址访问网站都是GET请求;在FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,其默认是GET提交方式。它们之间最直观的区别就是GET把参数包含在URL中;POST通过request body传递参数,它不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中。(一个看得到,一个看不到)

 request 有一个专门用来查看用户的请求方式的方法——method。现在就来验证下吧! 我以上次的test函数为例,添加 print(request.method)语句, 它对应的网页路径是/hd

在这里插入图片描述

那么我们点击运行后访问 http://127.0.0.1:8000/hd/

在这里插入图片描述

再回到我们的pycharm就能看到访问网页使用的请求方式了,果然是get请求

在这里插入图片描述

 另外,我们能够通过request.GET获取网页上url传递过来的参数。怎么传递参数呢?在url后面输入“ ?”,然后就能输入参数了,多个参数用&连接。

 还是以刚才的 http://127.0.0.1:8000/hd/ 为例,在后面输入?a=5&b=3变成
http://127.0.0.1:8000/hd/?a=5&b=3,最后在视图函数test使用request.GET(GET必须大写)方法接收,并打印结果。

在这里插入图片描述

在这里插入图片描述

 说完GET请求咱们再来结合例子说明一下POST请求。POST请求经常出现在表单中,使用时需要用method指定。我们模拟一个非常简单的用户注册界面:当我们输入完用户名和密码后,希望用两个变量接收它,方便以后存储到数据库。

 先制作一个简单的HTML页面。当我们提交表单数据后,跳转至/save/页面进行保存

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>用户注册</title>
</head>
<body>
<h1>用户注册系统</h1>
<form method="post" action="/save/">
   <p>用户名:<input type="text" name="user" value="请输入用户名"></p>
    密  码:<input type="password" name="password"></p>
   <p><input type="submit" value="注册"></p>
</form>
</body>
</html>

接着定义两个视图函数,一个调用模板用来注册用户,一个用来保存用户信息并提示注册成功。

def login(request):
    return render(request, "demo.html")


def save(request):
    user = request.POST.get("user")
    pwd = request.POST.get("password")
    print(f"用户名:{user},密码:{pwd}")
    return HttpResponse("注册成功!")

最后再新增两个路由

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),
    path('save/', views.save)
]

现在就能开始注册啦!

先运行程序,然后进入http://127.0.0.1:8000/login/

在这里插入图片描述

输入完用户名和密码后点击注册,发现…被禁用了?

在这里插入图片描述

csrf_token

为降低安全隐患,django专门为用户设置了一个防止跨站请求伪造(csrf)的功能——csrf_token。当在表单中用post提交数据的时候,django会去检查是否有一个csrf的随机字符串,如果没有就会报错,也就是刚才出现的页面。

因此,我们在表单中使用post传递数据时需要加上{% csrf_token %}这条命令。

我们加上这条命令后重新运行进入注册网页,发现多了一串秘钥是之前没有的。

在这里插入图片描述

再次输入用户名与密码,然后点击注册,就能注册成功了!接着回到pycharm也能够看到用户名跟密码都打印出来了

在这里插入图片描述

响应

常见的响应形式一般有三种HttpResponse,render,redirect。前面两种我们已经使用过。

 HttpResponse可以返回简单的字符串

HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)

 render

它的作用是调用模板,并能通过字典向模板传入数据。它有以下属性:

  • request:用于生成响应的请求对象。必须要写
  • template_name: 要使用的模板的完整名称。 也要写
  • context: 添加到模板上下文的一个字典. 默认是一个空字典. 如果字典中的某个值是可调用的, 视图将在渲染模板之前调用它.
  • content_type:  生成的文档要使用的MIME类型. 默认为DEFAULT_CONTENT_TYPE设置的值. 默认为"text/html"
  • status: 响应的状态码. 默认为200

重定向

我单独把它拎出来呢是因为前面我们没有讲过重定向,因此我要举个例子说明一下。在上面的用户注册系统上稍作修改:我们注册完用户信息后不再提示用户注册成功,而是直接跳转到登录成功后的页面。

在视图函数save中将原先的 return HttpResponse(“注册成功!”) 改为 return redirect("https://www.baidu.com")。点击运行后再次进入http://127.0.0.1:8000/login/

输入完用户名密码点击注册后就能跳转啦!

在这里插入图片描述

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!   

相关文章

  • python使用Geany编辑器配置方法

    python使用Geany编辑器配置方法

    这篇文章主要介绍了python使用Geany编辑器配置方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • python 中yaml文件用法大全

    python 中yaml文件用法大全

    本文主要是总结yaml常用的一些数据形式,对于我们正常的项目使用,已经足够用了,接下来通过本文给大家分享python 中yaml文件用法,需要的朋友参考下吧
    2021-07-07
  • Python线程池ThreadPoolExecutor使用方式

    Python线程池ThreadPoolExecutor使用方式

    这篇文章主要介绍了Python线程池ThreadPoolExecutor使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python 提取dict转换为xml/json/table并输出的实现代码

    Python 提取dict转换为xml/json/table并输出的实现代码

    这篇文章主要介绍了Python 提取dict转换为xml/json/table并输出的实现代码,需要的朋友可以参考下
    2016-08-08
  • Python使用Selenium实现模拟登录的示例代码

    Python使用Selenium实现模拟登录的示例代码

    Selenium(本文基于python3.8)是一个功能强大的自动化测试工具,它可以用于模拟用户在浏览器中的行为,比如点击、输入、滚动等等,本教程将详细介绍如何使用Python编写一个模拟登录地爬虫,使用XPath等多种元素匹配方法,需要的朋友可以参考下
    2023-08-08
  • PyQt5+PyQt5Designer的安装步骤

    PyQt5+PyQt5Designer的安装步骤

    本文主要介绍了PyQt5+PyQt5Designer的安装步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • python机器学习理论与实战(二)决策树

    python机器学习理论与实战(二)决策树

    这篇文章主要介绍了python机器学习理论与实战第二篇,决策树的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • python将数组n等分的实例

    python将数组n等分的实例

    今天小编就为大家分享一篇python将数组n等分的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 通过数据库对Django进行删除字段和删除模型的操作

    通过数据库对Django进行删除字段和删除模型的操作

    这篇文章主要介绍了通过数据库对Django进行删除字段和删除模型的操作,这里假设我们已经建立了一个名为book的数据模型,需要的朋友可以参考下
    2015-07-07
  • 如何用python清洗文件中的数据

    如何用python清洗文件中的数据

    数据清洗是整个数据分析过程的第一步,就像做一道菜之前需要先择菜洗菜一样。 数据分析师经常需要花费大量的时间来清洗数据或者转换格式,这个工作甚至会占整个数据分析流程的80%左右的时间。今天,就来学习一下Python的数据清洗吧!
    2021-06-06

最新评论