1. 1.路由层
    1.1无名分组
    1.2 有名分组
    1.3 反向解析
    1.4 路由分发
    1.5 名称空间
  2.  
  3. 2.伪静态网页
  4.  
  5. 3.虚拟环境
  6.  
  7. 4.视图层
    1.1 JsonResponse
    1.2 FBVCBV
    1.3 文件上传
  8.  
  9. 1.路由层
    热身:
      
  1. urlpatterns = [
  2. url(r'^admin/', admin.site.urls),
  3. url(r'^reg/', views.reg),
  4. url(r'^$', views.home),
  5. url(r'',views.error)
  6.  
  7. ]
  8.  
  9. def home(request):
  10.  
  11. return HttpResponse('首页')
  12.  
  13. def error(request):
  14. return HttpResponse('广告摊位显示页面')
  15.  
  16. 遵循的原则:第一个是正则表达式,匹配规则按照从上往下的顺序,依次匹配直到匹配到第一个,立即停止匹配,
    直接执行对应的视图函数,根据正则路由返回相应的结果。
  17.  
  18. 所以上面的结果其实都是匹配为空,返回结果就是我们HttpResponse 对象。
    只要ip和端口正确 输入任何字符 结果都为“首页” 下面的也是一样的
    那么什么时候执行下面的呢当然是将它上面的注销即可。

  

  1. 1.1 无名分组
  1. url(r'^test/(\d+)/',views.test) # 里面的内容是值匹配一个数字或者多个书数字
  2.  
  3. 无名分组:将括号内的正则表达式路径匹配到的内容当做位置参数自动传给对应的视图函数
  4. 前端页面:http://127.0.0.1:8000/test/123456/
  5.  
  6. def test(request,aaa):
  7. print(aaa) #
  8. return HttpResponse('test') 返回test
  1.  
  1. 1.2 有名分组
  1. url(r'^test/(?P<year>\d+)/', views.test1)
  2.  
  3. 注意:有名函数的写法。
  4. 有名分组(将加括号的正则表达式匹配到的内容当做关键字参数自动传递给对应的视图函数)
  5. http://127.0.0.1:8000/test/2019/1243
  6. year 匹配的是数据
  7.  
  8. def test1(request, year):
  9. print(year)
  10. return HttpResponse('test1')
  1. 注意;
  1. url(r'(^test2/\d+)/(?P<year>\d+)', views.test2) 有名函数与无名函数不能一起使用
  2. 补充:
  3. 但是支持用一类型多个形式匹配
  4. 无名分组多个
  5. url(r'^test/(\d+)/(\d+)/',views.test),
  6. 有名分组多个
  7. url(r'^test/(?P<year>\d+)/(?P<xxx>\d+)/',views.test),
  1. 1.3 反向解析
    定义:反向解析(跟据名字动态获取到对应路径)
  2.  
  3. from django.shortcuts import reverse
  1. url(r'^index888/$',views.index, name='index')
  2. ]
  3.  
  4. 可以给每一个路由与视图对应关系起一个别名
  5.  
  6. 这个名字能够唯一标识对应的路径
  7. 注意:这个名字不能重复是唯一的
  8.  
  9. 前端使用使用:
  10. {% url 'index' %} # index 就是你写的别名name='index' 页面可以动态解析
  11. {% url '你给路由与视图函数对应关系起的别名' %}
  12.  
  13. 后端使用:
  14. reverse('index')
  15. reverse('你给路由与视图函数对应关系起的别名')
    无名分组反向解析:
  16.  

url(r'^test/(\d+)/',views.test,name='list')

后端使用
print(reverse('list',args=(10,)))
前端使用
{% url 'list' 10 %}

user_list = models.User.objects.all()


url(r'^edit/(\d+)/',views.edit,name='edit')
前端模板语法
{%for user_obj in user_list%}
<a href='edit/{{ user_obj.pk }}/'></a>
{% endfor %}

视图函数

from django.shortcuts import reverse

def edit(request,edit_id):

  url = reverse('esdit', args =(edit_id,))

{% url 'list' year=10 %} 有名解析后端使用

前端模版语法:反向解析本质以及应用场景  图书馆理系统 get 请求进行更改

  { % url 'edit' edit_id %}

总结:针对有名分组与无名分组的反向解析统一采用一种格式即可
后端
reverse('list',args=(10,)) # 这里的数字通常都是数据的主键值 也通常用的都是这个
前端
{% url 'list' book.pk %}  # 可以建 book.pk 传到后端函数 有名或者无名 进行参数的的接收 def edit(request,edit_id)
反向解析的本质:就是获取到一个能够访问名字所对应的视图函数

有名分组的反向解析:

  后端使用 有名分组和无名分组都可以用

  print(revsers('list', args = (10,)) 这个一般用的比较多

  1. def test(request,year):
    print('xxx',year)
  2.  
  3. # print(reverse('list',args=(10,))) 这个一般用的比较多
    print(reverse('list',kwargs={'year':10})) 其实一样额
    return HttpResponse('test')
  1. 1.4 路由分发
  1. django每一个app下面都可以有自己的urls.py路由层,templates文件夹,static文件夹
  2. 项目名下urls.py(总路由)不再做路由与视图函数的匹配关系而是做路由的分发
  3. from django.conf.urls import include
  4.  
  5. # 路由分发 注意路由分发总路由千万不要$结尾
  6. url(r'^app01/',include(app01_urls)),
  7. url(r'^app02/',include(app02_urls))
      # 还可以 进行起别名
      from django.conf.urls import
      from app01 import urls as app01_urls # 这种太麻烦不推荐使用
  8.  
  9. # 在应用下新建urls.py文件,在该文件内写路由与视图函数的对应关系即可
  10. from django.conf.urls import url
  11. from app01 import views
  12. urlpatterns = [
  13. url(r'^index/',views.index)
  14. ]
  1.  
  1.  
  2. 1.5 名称空间
  1. url(r'^app01/',include(app01_urls,namespace='app01')),
  2. url(r'^app02/',include(app02_urls,namespace='app02'))
  3. app01.urls.py
  4. from django.conf.urls import url
  5. from app01 import views
  6. urlpatterns = [
  7. url(r'^index/',views.index,name='index')
  8. ]
  9.  
  10. app02.urls.py
  11. from django.conf.urls import url
  12. from app02 import views
  13. urlpatterns = [
  14. url(r'^index/',views.index,name='index')
  15. ]
  16.  
  17. app01.views.py
  18. reverse('app01:index') # 通过反向解析问事务页面进行跳转
  19.  
  20. app02.views.py
  21. reverse('app02:index')
  1.  
  1. 2.伪静态网页
  1. 搜索优化seo 本质其实是动态网页只是.html 提高网页的索搜索频率 seo 查询效率
  2. url(r'^index.html',views.index,name='app01_index')
  1.  
  1. 3.虚拟环境:最多开两到三个 相当于 每次都重新装一个pycharm

不同的项目配置不同的python解释器

django1.0与django2.0之间的区别
django2.0里面的path第一个参数不支持正则,你写什么就匹配,100%精准匹配

django2.0里面的re_path对应着django1.0里面的url

虽然django2.0里面的path不支持正则表达式,但是它提供五个默认的转换器

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

  1. 补充:

自定义转换器
1.正则表达式
2.类
3.注册

# 自定义转换器
class FourDigitYearConverter:
regex = '[0-9]{4}'
def to_python(self, value):
return int(value)
def to_url(self, value):
return '%04d' % value # 占四位,不够用0填满,超了则就按超了的位数来!
register_converter(FourDigitYearConverter, 'yyyy')
PS:路由匹配到的数据默认都是字符串形式

  1.  
  2. 4.视图层
    1.1 JsonResponse
    1.2 FBVCBV
        FBV:基于函数的视图
        CBV:基于类的视图
  1. url(r'^mycls/',views.MyCls.as_view())
  2.  
  3. class MyCls(View):
  4. def get(self,request):
  5. return render(request,'index.html')
  6. def post(self,request):
  7. return HttpResponse('post')
  8.  
  9. 无论是FBV还是CBV路由层都是路由对应视图函数内存地址
  10. urlpatterns = [
  11. # url(r'^mycls/',views.view)
  12. url(r'^mycls/',views.MyCls.as_view())
  13. ]
  14.  
  15. class MyCls(View):
  16. def get(self,request):
  17. return render(request,'index.html')
  18. def post(self,request):
  19. return HttpResponse('post')
  20.  

  21. 小白必会三板斧
  22. HttpResponse
  23. render
  24. redirect
  25.  
  26. JsonResponse
  27. from django.http import JsonResponse
  28. def index(request):
  29. # res = {'name':'Jason大帅比','password':18}
  30. # return HttpResponse(json.dumps(res))
  31. return JsonResponse({'name':'Jason大帅比','password':''},json_dumps_params={'ensure_ascii':False})
  32.  




  33. print('path:',request.path)
  34. print('full_path:',request.get_full_path())
  35.  
  36. path: /upload_file/
  37. full_path: /upload_file/?name=jason
  1.  
  1. 1.3 文件上传:
  1. 简单的文件上传
  2. 前端需要注意的点:
  3. 1.method需要指定成post
  4. 2.enctype需要改为formdata格式
  5.  
  6. 后端暂时需要注意的是
  7. 1.配置文件中注释掉csrfmiddleware中间件
  8. 2.通过request.FILES获取用户上传的post文件数据
  1. 后端函数实现功能:
    def upload(request):
    if request.method == 'POST':
    print(request.FILES) #

<MultiValueDict: {'my_file': [<InMemoryUploadedFile: day55课堂笔记.md (application/octet-stream)>]}>  #字典套列表

  1. file_obj = request.FILES.get('my_file') # 注意获取文件通过前端传过来的my_file
                                   拿到file_obj 文件对象day55课堂笔记.md
    with open(file_obj.name,'wb')as f:
    for line in file_obj:
    f.write(line)
    return HttpResponse('OK')
    return render(request, 'upload.html')
  2.  
  3. 前端页面就是form表单就行提交文件
  1. <form action="" method="post" enctype="multipart/form-data">
    <p><input type="file" name="my_file"></p> # 硬盘文件
    <input type="submit" class="btn btn-primary">
    </form>
  1.  
  1.  
  1. 待续......

Django 路由层与视图层的更多相关文章

  1. Django路由层与视图层、pycharm虚拟环境

    一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实 ...

  2. Django路由层与视图层

    表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...

  3. Django路由层、视图层

    一.路由匹配: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个后立即停止 urlpatterns = [ url(r'^admin/', admin.site.urls), url( ...

  4. Django的路由层和视图层

    一丶Django 的路由层(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django ...

  5. 052.Python前端Django框架路由层和视图层

    一.路由层(URLconf) 1.1 路由层简单配置 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Dj ...

  6. 关于Django路由层简单笔记

    Django—路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...

  7. django 路由层 伪静态网页 虚拟环境 视图层

    路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页 虚拟环境 视图层 JsonResponse FBV与CBV 文件上传 项目urls.py下面 from app01 import ...

  8. $Django 路由层(有,无名分组、反向解析、总路由分发、名称空间、伪静态)

    1 简单配置 -第一个参数是正则表达式(如果要精准匹配:'^publish/$')  -第二个参数是视图函数(不要加括号)  -url(r'^admin/', admin.site.urls), 注: ...

  9. django 实战篇之视图层

    视图层(views.py) django必会三板斧 HttpResponse >>> 返回字符串 render >>> 支持模板语法,渲染页面,并返回给前端 red ...

随机推荐

  1. Activiti之Idea生成png图片及解决乱码问题(四)

    IDEA 工具中的操作方式 第一步:将 holiday.bpmn 文件改为扩展名 xml 的文件名称: holiday.xml修改前的 bpmn 文件,效果如下: 第二步: 在 holiday.xml ...

  2. 【BZOJ5092】分割序列(高维前缀和)

    题意:对于一个长度为n的非负整数序列b_1,b_2,...,b_n, 定义这个序列的能量为:f(b)=max{i=0,1,...,n}((b_1 xor b_2 xor...xor b_i)+(b_{ ...

  3. (23)C++/Python项目练习一

    逆转字符串——输入一个字符串,将其逆转并输出. Python: def rev(s): return (s[::-1]) s =input("请输入一个字符串:") a = rev ...

  4. SpringCloud 教程 (三)高可用的服务注册中心

    一.准备工作 Eureka can be made even more resilient and available by running multiple instances and asking ...

  5. CG-CTF | SQL Injection

    没错我又偷偷写了道web[并查集好难啊,脑阔疼QAQ] http://chinalover.sinaapp.com/web15/index.php?username=%5C&password= ...

  6. 判断内网机器的真实外网IP或域名的方法总结

    在内渗透中有时需要在某台WEB服务器中留下后门,可以通过内网IP建立IPC连接,但还需要获知外网IP才能访问Wbshell,在无网关权限的情况下,我总结了有如下方法: nslookup myip.op ...

  7. 服务器中常见的RAID

    Standalone 最普遍的单磁盘储存方式. Cluster 集群储存是通过将数据分布到集群中各节点的存储方式,提供单一的使用接口与界面,使用户可以方便地对所有数据进行统一使用与管理. Hot sw ...

  8. [CSP-S模拟测试]:题(DP+数学)

    题目描述 出个题就好了.这就是出题人没有写题目背景的原因.你在平面直角坐标系上.你一开始位于$(0,0)$.每次可以在上/下/左/右四个方向中选一个走一步.即:从$(x,y)$走到$(x,y+1),( ...

  9. jq和js用法:入口写法

    jq和js入口写法demo: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  10. 关于c++ error : passing " "as" " discards qualifiers

    http://www.cppblog.com/cppblogs/archive/2012/09/06/189749.html 今天写了一段小代码,本以为正确,但运行后,就somehow ”discar ...