1. 带变量的URL

#urls.py
from django.urls import path
from .view import * urlpatterns = [
path('',index_views),
#添加带有整数的字符类型、整形和slug的URL
path('<year>/<int:month>/<slug>',mydate_views),
]

URL变量类型:

  • 字符类型 : 默认类型,匹配任何非空字符串,但不含'/'
  • int : 整型
  • slug : 可理解为注释、后缀或附属等概念
  • uuid : 匹配一个uuid格式对象.为防止冲突,规定必须使用破折号并且所有字母小写
from django.urls import re_path
from .views import * urlpatterns = [
path('',index_views),
re_path('test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})',mydate_views),
]

使用正则表达式写法:

  • ?P 是固定格式
  • 为变量的编写规则
  • [0-9]{4} 是正则表达式

2. 响应类型

视图函数return的响应类型

响应类型 说明
HttpResponse('Hello World') HTTP状态码200,请求已成功被服务器接收
HttpResponseRedirect('/admin/') HTTP状态码302,重定向Admin站点的URL
HttpResponsePermanentRedirect('/admin/') HTTP状态码301,永久重定向Admin站点的URL
HttpResponseBadRequest('BadRequest') HTTP状态码400,访问的页面不存在或者请求错误
HttpResponseNotFound('NotFound') HTTP状态码404,网页不存在或网页的URL失效
HttpResponseForbidden('NotFound') HTTP状态码403,没有访问权限
HttpResponseNotAllowed('NotAllowed') HTTP状态码405,不允许使用该请求方式
HttpResponseServerError('ServerError') HTTP状态码500,服务器内容错误

响应类型代表HTTP状态码,其核心作用是Web Server服务器用来告诉客户端当前网页请求发生了事,或者当前Web服务器的响应状态

3. 文件下载

def download_views(request):
# 定义HttpResponse的响应类型为文件(text/csv),生成resp对象
resp = HttpResponse(content_type="text/csv") # attachment设置文件下载方式,filename为文件名
resp['Content-Disposition'] = 'attachment;filename="somefilename.csv"' # 使用csv模块加载resp对象,把数据写入resp对象所设置的csv文件
writer = csv.writer(resp)
writer.writerow(['First row','A','B','C'])
return resp

也可以使用StreamingHttpResponseFileResponse实现下载,推荐使用FileResponse

def download_views2(request):
file = open('/home/tarena/简言.jpg','rb')
resp = FileResponse(file)
resp['Content-Type']='image/jpeg'
resp['Content-Disposition'] = 'attachment;filename="简言.jpg"'
return resp

关于文件下载类型,参考地址:

http://tool.oschina.net/commons

4. render(),redirect()函数

Django在django.http模块上进行封装.从而有了render(),redirect()函数

render()函数参数:

  • request : 浏览器向服务器发送的请求对象,必须参数
  • template_name : HTML模板文件名,用于生成HTML网页,必须参数
  • context : 对HTML模板变量赋值,以字典格式表示,默认为空字典
  • status : HTTP状态码,默认为200
  • using : 设置HTML模板转换成HTML网页的模板引擎

5. request常用属性

属性 说明 实例
COOKIES 获取客户端Cookie信息 data = request.COOKIES
FILES 字典对象,包含所有的上传文件.该字典有三个键:filename为上传文件名;content-type为上传文件的类型;content为上传文件内容 file = request.FILES
GET 获取GET请求的请求参数,以字典形式存储 request.GET.get('name')
META 获取客户端的请求头信息,以字典形式存储 request.META.get('REMOTE_ADDR') #获取客户端的IP地址
method 获取该请求的请求方式(GET或POST) data = request.method
path 获取当前请求的URL地址 path = request.path
user 获取当前请求的用户信息 name = request.user.username

6. 通用视图

Django植入了通用视图这一功能,该功能封装了视图开发常用的代码和模式

通用视图通过定义和声明类的形式实现的,根据用途划分为三大类:

  • TemplateView 直接返回HTML模板,但无法将数据库的数据展示出来
  • ListView 将数据库的数据传递给HTML,通常获取某个表的所有数据
  • DetailView 将数据库的数据传递给HTML模板,通常获取数据表的单条数据
# urls.py
...
path('index/',ProductList.as_view())
...
# views.py
from django.views.generic import ListView # 通用视图
class ProductList(ListView):
# 设置HTML模板的变量名称
context_object_name = "type_list" # 设定HTML模板
template_name = "index.html" # 查询数据
queryset = Product.objects.values('ttype').distinct() # 重写 get_queryset 方法,对模型 Product 进行数据筛选
# def get_queryset(self):
# type_list = Product.objects.values('ttype').distinct()
# return type_list # 添加其他变量
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context['name_list'] = Product.objects.values('name','ttype')
return context

通用视图还可以获取URL的参数和请求信息

# urls.py
...
path('index/<id>',ProductList.as_view(),{"name":"小米9"})
...
...
def get_queryset(self):
# 获取URL的变量id
print(self.kwargs['id'])
# 获取URL参数name
print(self.kwargs['name'])
# 获取请求方式
print(self.request.method) type_list = Product.objects.values('ttype').distinct()
return type_list
...

<玩转Django2.0>读书笔记:URL规则和视图的更多相关文章

  1. <玩转Django2.0>读书笔记:模板和模型

    1. 模板内置标签 Django常用内置标签 标签 描述 {% for %} 遍历输出变量的内容 {% if %} 对变量进行条件判断 {% csrf_token %} 生成csrf_token标签, ...

  2. <玩转Django2.0>读书笔记:表单

    1. 表单字段 参考: 官方文档 Django表单字段汇总 2. 表单代码示例(forms.Form) # form.py代码 # 获取数据库数据 choices_list = [(i+1,v['ty ...

  3. <玩转Django2.0>读书笔记:邮件和分页

    1. 发送邮件 # settings.py设置 # 邮箱设置 EMAIL_USE_SSL = True # 邮件服务器 EMAIL_HOST = 'smtp.qq.com' # 邮件服务端口 EMAI ...

  4. 《玩转Django2.0》读书笔记-编写URL规则

    <玩转Django2.0>读书笔记-编写URL规则 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. URL(Uniform Resource Locator,统一资源定位 ...

  5. 《玩转Django2.0》读书笔记-Django建站基础

    <玩转Django2.0>读书笔记-Django建站基础 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.网站的定义及组成 网站(Website)是指在因特网上根据一 ...

  6. 《玩转Django2.0》读书笔记-探究视图

    <玩转Django2.0>读书笔记-探究视图 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 视图(View)是Django的MTV架构模式的V部分,主要负责处理用户请求 ...

  7. 《玩转Django2.0》读书笔记-Django配置信息

    <玩转Django2.0>读书笔记-Django配置信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 项目配置是根据实际开发需求从而对整个Web框架编写相应配置信息. ...

  8. Django2.0中得url路由path得用法

    Django2.0中,url得匹配规则更新了,在django1.0中,url是用正则表达式书写得,相对来说比较繁琐一些,在django2.0中进行了升级优化,改为了path from django.u ...

  9. 玩转 Django2.0 笔记1

    模板静态  路由 urls.py urlpatterns = [ path("<year>/<int:month>/<slug:day>",my ...

随机推荐

  1. 多项式求导系列——OO Unit1分析和总结

    一.摘要 本文是BUAA OO课程Unit1在课程讲授.三次作业完成.自测和互测时发现的问题,以及倾听别人的思路分享所引起个人的一些思考的总结性博客.本文第二部分介绍三次作业的设计思路,主要以类图的形 ...

  2. echo 输入背景和字体常用方法

               ECHO输出背景颜色以及文字颜色输出格式:  echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"例如:        echo -e & ...

  3. Technocup 2019 - Elimination Round 2

    http://codeforces.com/contest/1031 (如果感觉一道题对于自己是有难度的,不要后退,懂0%的时候敲一遍,边敲边想,懂30%的时候敲一遍,边敲边想,懂60%的时候敲一遍, ...

  4. C# 创建Web项目时 可以选择的类型在不同VS版本下的对比

    上面这个界面应该是 vs2010的 一. VS2012 .VS2013 其实每个模板的意思,在右边已经显示出来了.Empty,就是一个空的模板,创建后里面除了一个web.config外什么都没有:We ...

  5. Spring AOP获取方法的参数名称和参数值

    aop配置: <aop:aspectj-autoproxy expose-proxy="true" /> @Before(value = "execution ...

  6. 学习笔记-ResNet网络

    ResNet网络 ResNet原理和实现 总结 一.ResNet原理和实现 神经网络第一次出现在1998年,当时用5层的全连接网络LetNet实现了手写数字识别,现在这个模型已经是神经网络界的“hel ...

  7. 【译】索引进阶(十二):SQL SERVER中的索引碎片【中篇】

    原文链接:传送门. 为了讨论碎片产生的原因,以及避免和移除索引碎片的技术,我们必须从本进阶系列后续将介绍的两个章节借用一些知识点:创建/更新索引的知识,以及向一个索引表插入数据行的相关知识. 当我们讲 ...

  8. 【easy】572. Subtree of Another Tree

    判断一棵树中是否包含另一棵子树(包含是,两棵树重合处的根节点之下的子节点都相等) 有两种方法: 方法二:递归写法 //方法一:可以借鉴之前序列化的题目,如果序列化得到的序列一样就是相同的树 //方法二 ...

  9. Shell学习笔记(二)

    if 语句 最简单的用法就是只使用 if 语句,它的语法格式为: if condition then statement(s) fi condition是判断条件,如果 condition 成立(返回 ...

  10. Python turtle模块小黄人程序

    讲解Python初级课程的turtle模块,简单粗暴的编写了小黄人的程序.程序还需要进一步优化.难点就是要搞清楚turtle在绘制图形过程中的方向变化. import turtle t = turtl ...