热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django基础之三(类视图)

类视图简介视图是一个可调用的对象,它接收一个请求然后返回一个响应,这个可调用对象可以不只是函数,Django提供一些可以用作视图的类基于类的视图使用Python对象实现视图,它提供
类视图

简介

视图是一个可调用的对象,它接收一个请求然后返回一个响应,这个可调用对象可以不只是函数,Django提供一些可以用作视图的类
基于类的视图使用Python 对象实现视图,它提供除函数视图之外的另外一种方式

view

  • 属性

http_method_names:添加未知的请求方法

  • 方法

as_view():将类视图转换成可被调用的函数视图
dispatch(): 根据请求去匹配http_method_names下的对应函数去处理请求
http_method_not_allowed():返回405错误

  • 实例

from django.views import View
class IndexView(View):
http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace','list']
def get(self,request,*args,**kwargs):
return HttpResponse(IndexView)
def post(self,request,*args,**kwargs):
data = request.POST
return HttpResponse(data)
#需要将list方法加入 http_method_names,否则会经过,dispatch,http_method_not_allowed():返回405错误
def list(self,request,*args,**kwargs):
return HttpResponse("ListView")
请求方式:
In [27]: import requests
In [28]: url = 'http://192.168.33.10:8080/dashboard/index/'
In [29]: res = requests.request('list',url)
In [30]: res.content
Out[30]: b'ListView'

数据分页

基于sql切片的方式分页

数据准备

In [3]: from django.contrib.auth.models import User
In [4]: for n in range(1,101):
...: User.objects.create_user('wanghui-{}'.format(n),'wanghui-{}@alibaba.com'.format(n),'123456')
In [5]: User.objects.all()[1:10]

类视图

class UserView(View):
#http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace','list']
def get(self,request,*args,**kwargs):
#展示数据
# queryset = User.objects.all()
# return HttpResponse(queryset)
try:
page = int(request.GET.get('page'))
except:
page = 1
if page <1:
page = 1
per = 10
end = page * per
start = end - per
queryset = User.objects.all()[start:end]
data = [{"id":user.id,"username":user.username,"email":user.email} for user in queryset]
return JsonResponse(data,safe=False)

基于Paginator对象的分页

class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
属性
- Paginator.count 所有页面的objects总数
- Paginator.num_pages 页面总数
- Paginator.page_range 页码的范围,从1开始,例如[1, 2, 3, 4]
方法
- Paginator.page(number) 返回一个page对象,number, 当前显示的是第几页

Page对象

class Page(object_list, number, paginator)
方法
- Page.has_next() 如果有下一页,返回True
- Page.has_previous() 如果有上一页,返回 True
- Page.has_other_pages() 如果有上一面或下一页,返回True
- Page.next_page_number() 返回下一页的页码.如果不存在,抛出InvalidPage异常
- Page.previous_page_number() 返回上一页的页码.如果不存在,抛出InvalidPage异常
- Page.start_index() 返回当前页上的第一个对象,相对于分页列表的所有对象的序号
- Page.end_index() 返回当前页上的最后一个对象,相对于分页列表的所有对象的序号

创建用户小例子

from django.core.paginator import Paginator
class UserViewV2(View):
def get(self,request,*args,**kwargs):
queryset = User.objects.all()
paginator = Paginator(queryset,10)
try:
page = int(request.GET.get("page"))
except:
page = 1
if page <1:
page = 1
page = paginator.page(page)
data = [{"id":user.id,"username":user.username,"email":user.email} for user in page.object_list]
return JsonResponse(data,safe=False)
def post(self,request,*args,**kwargs):
username = request.POST.get("username")
userpass = request.POST.get("userpass")
email = request.POST.get('email')
if not username or userpass or not email:
return JsonResponse({"errormsg":"参数有误!"})
user = User.objects.create(username,email,userpass)
return JsonResponse({"id":user.id,"username":user.username,"email":user.email})

请求方式

In [1]: import requests
In [2]: url = "http://192.168.33.10:8080/dashboard/userview/"
In [3]: data = {}
In [4]: data["username"] = "zhangsan"
In [5]: data["userpass"] = '123456'
In [6]: data["email"] = "zhangsan@alibaba.com"
In [7]: requests.post(url,data)
Out[7]:

推荐阅读
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
author-avatar
100斤的重口味_866
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有