Django的GET和POST传参请求

前言

今天给大家分析的是Django的GET与POST方式传参请求,这里是在大家能正常HTTP响应的基础上进行的。

前提准备

具体的数据准备工作可以在我的另一篇Django的http响应观看,这里简单进行说明一下

版本 python:3.10.12
Django:3.2.12 [每个版本语法上都会有些差异]
系统:linux
编辑器:vscode

创建项目:django-admin startproject 项目名称

  • 结构
      mysite/
      manage.py
      mysite/
          __init__.py
          settings.py
          urls.py
          asgi.py
          wsgi.py
    
      这里mysite是我的项目名称,注意在 mysite下还有一个mysite文件夹
    

在第二个mysite下创建一个views.py,把目光聚焦在 urls.py 和 views.py还有manage.py上,这是今天主题需要操作的部分

manage.py: 是项目管理的主程序,在开发阶段用于管理整个项目的开发运行和调试

view.py:自创的文件,接收一个浏览器请求并通过HttpResponse对象返回数据的函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的内容给浏览器

urls.py:项目的基础路由配置文件,所有动态路径必须先走该文件进行匹配。比如浏览器访问的地址路由 就会走这个文件匹配

// 大概运行就是 urls定义了一个路由,而且有views函数的对象,当浏览器访问这个路由时,就是找到urls这里,然后调用
// views的函数,这里可以接受浏览器传过来的数据,然后可以进行处理,之后返回给浏览器

// 这里大概理解一下,如果看不懂也没关系,往下看,定义概念都是需要通过代码实践理解的,大家有个大概印象即可

GET 传参请求

url格式:xxx?参数名1=值1&参数名2=值2 [首先?不能少,参数与参数之间用&相隔]

比如:http://127.0.0.1:8080/page1?a=100&b=200

pag1:是你访问的路由

  • 语法(获取浏览器数据)
            request.GET['参数名']  # QueryDict
            request.GET.get('参数名','默认值')
            request.GET.getlist('参数名')

       
    // 这里实际需要理解一下我们从浏览器获得的数据,比如:mypage?a=100&b=200&c=300&b=400
    {'a':[100],'b':[200,400],'c':[300]}  
    它是一个字典加列表的组合  request.GET['参数名'] 和 request.GET.get('参数名','默认值'),当参数名选b的时候
    它会报错,因为b有两个值,需要用request.GET.getlist('参数名')才能输出,输出一个列表

告知

一切就绪:只差写代码了,如果上面理论方面模糊不清楚都没关系,就和数学一样,高数概念的定义我看一个上午都是蒙的,但是
只要练手一两道题目,就能理解了,理论为辅,实践为主,实践才能出真知。
题目: 访问地址:<http://127.0.0.1:8000/sum?start=整数&stop=整数&step=整数>
比如:
    输入网址: http://127.0.0.1:8000/sum?start=1&stop=101&step=1
    - 页面显示: 结果: 5050

    
分析:
    start是开始值,stop是结束,step是步长(间隔),求和

这里我们分客户端(浏览器)和服务端(代码端)来讲解

  • 服务端
# views.py 视图函数
def sum_view(request):
  sum=0  
  if request.method=="GET":
    start = request.GET.get('start',0)  # 默认值为0
    stop = request.GET['stop'] # 没有得到stop就报错
    step = request.GET.get('step',1) 
    for i in range(int(start),int(stop),int(step)):
      sum += i
    html = "结果是 %d"%sum
    return HttpResponse(html)

  elif:
    return HttpResponse("当前请求不是GET请求")

"""
   这段代码应该不难理解吧,request接受浏览器的请求与数据,然后我们对该请求进行处理,再返回给浏览器
"""
from . import views   # 添加这行,导入views模块,其它原有的不要动

# urls.py 
urlpatterns=[
  path('admin/', admin.site.urls),
  path('sum/',views.sum_view),
]

"""
  path('sum/',views.sum_view),这是我们添加的一行,前面sum/就是浏览器需要访问的路由,而后面那个明显
  就是我们刚才写的视图函数
"""
  • 启动程序

使用终端,切换到该项目的路径下,然后 python3 manage.py runserver,运行成功后,下面会出现一行地址,ctrl+鼠标点击

  • 客户端(浏览器端)

http:127.0.0.1:8000 这个就是打开后的页面和地址
http:127.0.0.1:8000?stop=1&stop=101&step=1 后面这个就是我GET传参传入的数据,这个数据可以自己定义

页面显示:结果是 5050 我这答案是根据那三个变量赋值决定的,可以自己尝试赋予别的值

POST传参

  • 语法
  request.POST['参数名']  # request.POST 绑定QueryDict(和GET那个同样的结构{key:[value1,value2],....})
  request.POST.get('参数名','')
  request.POST.getlist('参数名')

  # 都是通过这种手段获取数据,且它的结构和GET的一样
  • 理解
我们需要明白一个事:
    GET传参主要是请求数据,客户端(浏览器端) 向服务端(代码端) 索要
    POST是向服务器提交数据

    大概举个例子,GET就是我们平时在浏览器中点一个主题,结果就跳到另一个页面,是呈现给我们看的
    而POST就是帐号密码登录,帐号密码传给服务端。
  • 流程
这里我们就以登录为例

1. 我们登录的时候肯定是有个信息收集页面,这就是我们像服务器提交数据的媒介
2. 信息收集页面,第一想到的就是前端,而前端可以输入信息并且能提交的,那必然是表单

ok,这里我们整理一下流程,浏览器访问一个路由,浏览器展现出一个页面,而这个页面就是由html的表单所写的
信息收集页面,然后填写数据信息,提交到服务端,服务端对于这个post请求进行处理

浏览器访问路由 --> 服务端返回数据 ---> 浏览器显示页面  (这个明显是一个GET请求) 
然后:
浏览器收集数据提交 --> 服务端处理(这里我让它返回一个结果)--->浏览器显示  (这是POST请求)
  • 服务端代码
# views

login_form_html = """
        <form action="/login/" method="post">
            姓名:<input type="text" name="username">
            <input type="submit" value="登录">
        </form>
"""

def login_view(request):
    if request.method == "GET":
        return HttpResponse(login_form_html) # 这就是上面的第一条流程图的部分 

    elif request.method == "POST":  # 这是第二条流程图的部分
        name = request.POST.get('username',"NULL")
        return HttpResponse("姓名:"+ name)


  # 这里大家要结合我上面的分析看,这是哪一步

from . import views   

# urls.py 
urlpatterns=[
  path('admin/', admin.site.urls),
  path('sum/',views.sum_view),
  path('login/',views.login_view), # 这是添加部分代码
]
  • 运行程序,同上

  • 客户端

1. http:127.0.0.1:8000/login/  按回车键后就会显示表单页面
2. 填写数据,然后提交
3. 显示403,禁止访问,这里它默认设置是禁止访问的
4. 找到 settings.py 中 MIDDLEWARE 中的 CsrfViewsMiddleWare 的中间件 ,那一行注释掉
5. 如果前面没有操作失误的话,会显示     姓名:表单填写的姓名
    MIDDLEWARE = [
        ...
        # 'django.middleware.csrf.CsrfViewMiddleware',
        ...
    ]

结语

这几天状态很差,被睡眠折磨得和吸鸦片一样,所以如果有定义模糊,或者代码哪个细节有问题的,请各位指正
希望大家身体健康.
  • 26
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值