Django2.0路由补充之path,re_path及视图层

以下是Django2.0版本

正则捕获到的参数都是字符串,所以如果函数需要用的其他数据类型,可以在函数中直接转换,也可以在路由中直接转换,如下:

下面实例是匹配整数,传过去的参数就是整数

from django.urls import path,re_path

path(‘admin/<int:year>,view.year.archive‘) ===>匹配到一个整数变量

Django默认支持以下5个转化器:

  • str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
  • int,匹配正整数,包含0。
  • slug,匹配字母、数字以及横杠、下划线组成的字符串。
  • uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
  • path,匹配任何非空字符串,包含了路径分隔符(/)(不能用问号,因为问号在url地址有特殊含义。)

1.path

path的第一个参数不能用正则

path其实就是封装了五种精准的正则匹配(五个转换器),我们也可以自己定义方法。===》(int,str,slug,path,uuid)

自定义转换器:

  • regex 类属性,字符串类型
  • to_python(self, value) 方法,value是由类属性 regex 所匹配到的字符串,返回具体的Python变量值,以供Django传递到对应的视图函数中。
  • to_url(self, value) 方法,和 to_python 相反,value是一个具体的Python变量值,返回其字符串,通常用于url反向引用。

1 写一个类:
class Test:
  regex = ‘[0-9]{4}‘
  def to_python(self, value):
  # 中间写一堆处理
    value=value+‘aaa‘
    return value
  def to_url(self, value):  # 反向解析时候用到
    return ‘%04d‘ % value

# 和path,re_path在一个模块里
2 from django.urls import register_converter

# 括号里跟两个参数,第一个自定义的类 第二个是自定义的转换器类型

register_converter 将其注册到URL配置中
3 register_converter(Test,‘ttt‘)
4 path(‘index/<ttt:year>‘, views.index,name=‘index‘),

2.re_path

和Django1.1版本中的url用法相同,url地址可以用正则。

re_path (r‘^admin/(?P<name>\w{3})$‘,views.admin)

二 MVC和MTV

MVC :M 模型     V  模板         C 控制器(路由+views)

MTV:M 模型      T  template V  views

三 视图层

form表单,不写method 默认GET请求

1 什么情况用GET :请求数据,请求页面

1.什么情况用POST:向服务器提交数据,用GET会泄露数据,不懂技术的人也能看到

request.GET  得到的是一个封装的字典:QueryDict

request.POST  得到的是一个封装的字典:QueryDict

获得请求的方式(类型):request.method

http://127.0.0.1:8000/index/ppp/dddd/?name=lqz
 协议:ip地址和端口/路径?参数(数据)

print(request.path)   获得的是不包括数据的请求
 print(request.get_full_path())  获得的是整个url 包括数据请求

三件套:HttpResponse、redirect、render

from django.shortcuts import 三件套

JsonResponse(向前端页面发送json格式字符串)

# dic={‘name‘:‘lqz‘,‘age‘:18}
# li=[1,2,3,4]
# # return HttpResponse(json.dumps(li))
# from django.http import JsonResponse

# 加safe是因为jsonResponse有安全保护不能直接向前端发送json格式字符串,所以要设置成False
# return JsonResponse(li,safe=False)

四 CBV(class base view)和FBV(function base view)

CBV 和FBV基于类的视图和基于函数的视图

CBV:

1 from django.views import View
2 class Test(View):
  def dispatch(self, request, *args, **kwargs):
  # 加点东西
    print(‘111‘)

    obj=super().dispatch(request, *args, **kwargs)
  # 加点东西
    print(‘2222‘)
    return obj
  def get(self,request):
    obj= render(request,‘index.html‘)
    print(type(obj))
    return obj
  def post(self,request):
    return HttpResponse(‘ok‘)

3 re_path(r‘index/‘, views.Test.as_view()), # 这儿是固定写法

简单文件上传

index.html
1 <form action="" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="name">
密码:<input type="text" name="password">
文件:<input type="file" name="myfile">
<input type="submit">

</form>
#enctype="multipart/form-data"*******************  这个是上传文件必须要加的
#<input type="file" name="myfile">

2 # ff是一个文件对象,django封装的
ff=request.FILES.get(‘myfile‘)
# 文件对象的名字
file_name=ff.name
from django.core.files.uploadedfile import InMemoryUploadedFile
print(type(ff))
with open(file_name,‘wb‘) as f:
  for line in ff.chunks():  # chunks是文件对象的方法,相当于断点续传。为什么不能直接in ff:直接写入:因为ff是一个对象,不是一个文件
    f.write(line)

原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9591188.html

时间: 2024-10-09 20:03:21

Django2.0路由补充之path,re_path及视图层的相关文章

django2.0 路由规则

Django2.0中URL的路由机制 路由是关联url及其处理函数关系的过程.Django的url路由配置在settings.py文件中ROOT_URLCONF变量指定全局路由文件名称. Django的路由都写在urls.py文件中的urlpatterns列表中,由path()或re_path()作为元素组成. Django的URL路由流程: 1 Django查找全局urlpatterns变量(urls.py) 2 按照先后顺序,对URL逐一匹配urlpatterns每个元素 3 找到第一个匹配

springboot学习入门简易版四---springboot2.0静态资源访问及整合freemarker视图层

2.4.4 SpringBoot静态资源访问(9) Springboot默认提供静态资源目录位置需放在classpath下,目录名需要符合如下规则 /static  /public  /resources  /META-INF/resources 可以在src/main/resources目录下创建static,在该位置放置一个图片文件. 启动程序后,尝试访问http://localhost:8080/D.JPG,如能显示图片,配置成功. 2.5 SpringBoot整合freemarker视图

Django2.0 URL配置

一.实例 先看一个例子: from django.urls import path from . import views urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/', views.month_archive

5 Django-2的路由层(URLconf)

URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行. 简单的路由配置 from django.urls import path,re_path from app01 import views urlpatterns = [ re_path(r'^articles/2003/$', views.special_case_2003), re_p

Django 路由层,视图层,模板层

MVC与MTV模型 一.MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示: 二.MTV Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是: M 代表模型(Mode

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

Django2.0中,url得匹配规则更新了,在django1.0中,url是用正则表达式书写得,相对来说比较繁琐一些,在django2.0中进行了升级优化,改为了path from django.urls import path 导入path模块后,可以使用啦请看截图 原文地址:https://www.cnblogs.com/chaojiyingxiong/p/9693081.html

Django2.0中URL的路由机制

Django2.0中URL的路由机制 路由是关联url及其处理函数关系的过程.Django的url路由配置在settings.py文件中ROOT_URLCONF变量指定全局路由文件名称. Django的路由都写在urls.py文件中的urlpatterns列表中,由path()或re_path()作为元素组成. Django的URL路由流程: 1 Django查找全局urlpatterns变量(urls.py) 2 按照先后顺序,对URL逐一匹配urlpatterns每个元素 3 找到第一个匹配

Django2.0版本的path方法无法使用正则表达式的解决办法

本人的django的版本是2.0.6 在django项目中,在urls.py文件中,匹配路由用的path方法,之前我用的都是url方法 写了一个path方法,使用正则表达式 from django.contrib import admin from django.urls import path from app1 import views urlpatterns = [ # path('admin/', admin.site.urls), path('test/', views.Test.as

django2.0 path使用方法

Django2.0于2017年12月2日已经正式发布.Django2.0支持Python3.4,3.5以及3.6,移除了对Python2.7的支持.官方强烈建议Python 3.x使用最新的版本. 在Django2.0其中一个新特性为:简化Url路由的语法. 在代码上主要体现在新增了django.urls.path函数,它带来了更简洁.更可读的路由语法,如: 原来的url url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), D