5.8Django网络框架(8):视图案例

2024-05-27 01:18

本文主要是介绍5.8Django网络框架(8):视图案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

@路径参数

  • 定义路由表
# 响应函数按顺序接收路由参数
url(r'^patharg/(\d+)/', views.pathArg,name='pafunc'),# 路由定义中明确声明了由响应函数的哪个参数进行接收
url(r'^showdate/(?P<year>\d+)/(?P<month>\d+)/(?P<date>\d+)/', views.showDate,name='datefunc'),
  • 定义响应函数
# 按顺序从路由中获取路径参数
def pathArg(request, arg):return HttpResponse('hello:' + arg)# 按指定的名称从路由中获取路径参数
def showDate(request, month, date, year):return HttpResponse('%s年%s月%s日' % (year, month, date))

@常规路由和反向解析
- 定义路由表

# 去到带有多个超链接的页面
url(r'^links/', views.showLinksPage),
  • 定义响应函数
# links.html中演示常规的超链接和反向解析的超链接格式
def showLinksPage(request):return render(request, 'links.html')
  • links.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
im links.html from app templates
<ul>{# 常规路由 #}<li><a href='/app/patharg/456/'>查看路径参数1</a></li>{# 反向解析路由:appns=路由表名称,pafunc=响应函数名称,456=响应函数参数 #}<li><a href="{% url 'appns:pafunc' 456 %}">查看路径参数2</a></li>{# 常规路由 #}<li><a href='/app/showdate/2048/5/20/'>查看年月日1</a></li>{# 反向解析路由:appns=路由表名称,datefunc=响应函数名称,响应函数参数以关键字参数形式定义 year=2048 month=5 date=20 #}<li><a href="{% url 'appns:datefunc' year=2048 month=5 date=20 %}">查看年月日2</a></li>
</ul>
</body>
</html>

@请求重定向
- 定义路由表

# 该路由会被重定向
url(r'^redirect/', views.useRedirect),
  • 定义响应函数
# 重定向请求
def useRedirect(request):# 使用常规路由# return HttpResponseRedirect('/app/patharg/456/')# return HttpResponseRedirect('/app/showdate/2048/5/20/')# 使用反向解析路由# return HttpResponseRedirect(reverse('appns:pafunc',args=('456',)))return HttpResponseRedirect(reverse('appns:datefunc', kwargs={'year': '2048', 'month': '5', 'date': '20'}))

@返回JSON形式的数据

  • 定义路由表
#获得JSON格式而非HTML形式的数据返回
url(r'^getjson/', views.getJson,name='getjson'),
  • 定义响应函数
# 向客户端返回JSON数据
def getJson(request):return JsonResponse({'status': 200,'msg': 'request ok!','data': {'name': '比尔大门', 'hobbies': ['coding', 'reading']}})

@查看请求元信息

  • 定义路由表
# 查看请求元信息
url(r'^seerequestmeta/', views.seeRequestMeta),
  • 定义响应函数
# 查看客户端META信息
def seeRequestMeta(request):# 获取元信息对象reqMeta = request.META# 将元信息对象重构为一个标准字典data = {}for name in reqMeta:# print(name,'=',reqMeta[name])data[name] = reqMeta[name]# 交给页面进行渲染return render(request, 'request_info.html', context={'reqMeta': data})
  • 定义页面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>请求信息</title>
</head>
<body>
<ul>
{# 遍历字典进行数据展示 #}
{% for k,v in reqMeta.items %}<li>{{ k }}={{ v }}</li>
{% endfor %}
</ul>
</body>
</html>

@请求对象和响应对象的常用API

  • 定义路由表
# 查看请求和响应的常用API
url(r'^reqandresp/', views.requestAndResponse, name='knowrequest'),
  • 定义响应函数
# request和response对象常用API
def requestAndResponse(request):# 请求路径print('request.path =', request.path)# 请求方法print('request.method =', request.method)# GET请求携带的数据print('request.GET =', request.GET)print('request.GET.get("name","游客") =', request.GET.get("name", "游客"))print('request.GET.getlist("name") =', request.GET.getlist('name'))# print('request.GET["name"] =',request.GET["name"])# POST请求携带的数据print('request.POST =', request.POST)# 创建响应对象response = HttpResponse()# 设置响应内容response.content = 'im content'# 设置网络状态码(这里是随意设置的,实际开发中应按照HTTP协议进行设置)response.status_code = 404# 追加响应内容response.write('request.path =' + request.path + ';\r\n')response.write('request.method =' + request.method + ';\r\n')response.write('request.GET =' + str(request.GET) + ';\r\n')response.write('request.GET.get("name","游客") =' + request.GET.get("name", "游客") + ';\r\n')response.write('request.GET.getlist("name") =' + str(request.GET.getlist('name')) + ';\r\n')response.write('request.POST =' + str([k + "=" + v for k, v in request.POST.items()]) + ';\r\n')# 清空响应内容# response.flush()# 返回响应return response
  • 发起请求
http://127.0.0.1:8000/app/reqandresp/?name=bill&age=70

输出效果如图
这里写图片描述
这里写图片描述

@提交表单

  • 定义路由表
# 提交表单
url(r'^postform/', views.postForm,name='postform'),
  • 定义响应函数
# 提交表单
def postForm(request):return render(request, 'post_form.html')
  • 页面定义
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Form</title>
</head>
<body>{# 表单被提交到appns路由表下的knowrequest函数进行响应,方法为POST #}
<form action="{% url 'appns:knowrequest' %}" method="post">{# 提交表单必须的安全措施 #}{% csrf_token %}{# 用户输入将以name参数提交 #}<input type="text" name="name" placeholder="请输入用户名"><br>{# 用户输入将以password参数提交 #}<input type="password" name="password" placeholder="请输入你的银行卡密码"><br>{# 提交按钮 #}<input type="submit">
</form></body>
</html>

执行效果
这里写图片描述
这里写图片描述

这篇关于5.8Django网络框架(8):视图案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1006123

相关文章

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。