• 售前

  • 售后

热门帖子
入门百科

Python3+Django get/post哀求实现教程详解

[复制链接]
啤酒瓶空了缓 显示全部楼层 发表于 2021-10-25 19:05:49 |阅读模式 打印 上一主题 下一主题
一、阐明

之前写了一篇“Python3+PyCharm+Django+Django REST framework开发教程 ”,想着直接先容rest就完了。但回过头来看,一是rest在解耦的同时将框架复杂化了假如没有多终端那rest根本没有低落复杂度反而增长了复杂度,二是根本的get和post实现自己还是看半天。所以还是有必要再写一篇来先容django通例的MVC开发。
环境搭建程项目创建都类似的的rest化部分之前(2.5及之前)进行操作即可,就不重复阐明确。这里我创建的项目为django1,初始目次布局如下

二、环境配置

假如自己创建的项目不叫django1,则以下所有django1修改为自己的项目名。
 2.1 自界说模版路径及创建模版

主笔django1/django1/setting.py,定位到TEMPLATES变量,将DIRS的值修改为BASE_DIR+"/django1/templates",
在django1/django1目次下创建templates文件夹,并在其下创建get.html、post.html、result.html三个文件。
get.html,用于get提交:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>get请求示例</title>
  6. </head>
  7. <body>
  8.   <form action="/get" method="get">
  9.     <input type="text" name="q" />
  10.     <input type="submit" value="搜索" />
  11.   </form>
  12. </body>
  13. </html>
复制代码
post.html,用于post提交。{%%}表现其内是Django模板语句,{% csrf_token %}指示此表单加载时返回token在其提交时进行token认证(假如要关闭服务端该csrf附御功能将setting.py----MIDDLEWARE----'django.middleware.csrf.CsrfViewMiddleware'注释掉):
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>post请求示例</title>
  6. </head>
  7. <body>
  8.   <form action="/post" method="post">
  9.     {% csrf_token %}
  10.     <input type="text" name="q" />
  11.     <input type="submit" value="搜索" />
  12.   </form>
  13. </body>
  14. </html>
复制代码
result.html,用于表现get和post输入的内容。{{}}表现其内是Django模板变量:
  1. <h1>{{ result }}</h1>
复制代码
2.2 配置请求路由

Django所有请求路由都由urls.py设置,即便是存在的静态文件(如html)也要配置路由才气访问。
主笔django1/django1/urls.py,修改为以下内容:
  1. from django.contrib import admin
  2. from django.urls import path
  3. from django.conf.urls import url
  4. from . import view
  5. urlpatterns = [
  6.   path('admin/', admin.site.urls),
  7.   # url(r'^hello$', view.hello),
  8.   url(r'^get\.html$', view.get_html),
  9.   url(r'^get$', view.get),
  10.   url(r'^post\.html$', view.post_html),
  11.   url(r'^post$', view.post),
  12. ]
复制代码
2.3 实现处理逻辑

在2.2中我们配置了get.html、get、post.html、post四个请求分别转交到view.get_html、view.get、view.post_html、view.post进行处理。本节我们实现这四个处理逻辑。
在django1/django1文件夹下创建view.py,写入以下内容:
  1. from django.shortcuts import render, render_to_response
  2. def get_html(request):
  3.   return render_to_response('get.html')
  4. def get(request):
  5.   context = {}
  6.   # 通过request.GET['name']形式获取get表单内容
  7.   # result为重定向到的result.html所使用的变量
  8.   context['result'] = f"你搜索的内容为:{request.GET['q']}"
  9.   return render(request, 'result.html', context)
  10. def post_html(request):
  11.   # 不能和get一样使用render_to_response必须使用render进行重定向,不然服务端不会设置csrf_token
  12.   # return render_to_response('post.html')
  13.   return render(request, 'post.html')
  14. def post(request):
  15.   context = {}
  16.   # 通过request.GET['name']形式获取post表单内容
  17.   # result为重定向到的result.html所使用的变量
  18.   context['result'] = f"你搜索的内容为:{request.POST['q']}"
  19.   return render(request, 'result.html', context)
复制代码
此中留意如注释所夸大,post_html中不能利用render_to_response必须利用render进行重定向,否则服务器不能成功返回token导致token验证失败进而导致不能访问页面(403,CSRF token missing or incorrect.)。如下图所示:

别的,如上所示返回了具体的错误信息,这在信息安全中是忌讳但这并不是django没考滤到,而是Django默认开启DEBUG模式,到settings.py中设置DEBUG = False,并设置ALLOWED_HOSTS即可(ALLOWED_HOSTS不是指允许访问服务的IP而是允许外部访问服务地址)。

三、运行结果

3.1 总体目次布局

经第二大节所有操作,项目目次布局如下图所示(.idea和__pycache__不消管): 

3.2 运行结果

get请求页面:

get请求结果:

post请求页面:

post请求结果:

本文主要先容了Django中get/post请求实现简朴方法,想相识更多关于Django的利用教程请检察下面的相关链接

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作