zoukankan      html  css  js  c++  java
  • Django笔记03

    路由层

    urlpatterns = [
      url(r'^admin/',admin.site.urls),
      url(r'test',view.test),
      url(r'testadd',views.testadd),
    ]
    路由一旦匹配就不会在往下匹配了
    路由增加首页的方式
      url(r'^$',views.home)
    路由增加尾页的方式(当所有的路径都匹配不上时,返回404界面)
      url(r'',views.error)

    无名分组

      url(r'^test/(d+{4})',views.test)

      会将括号中的正则表达式匹配的内容当作位置参数传递给后面的视图函数

    有名分组

      url(r'^test/(?<year>d+{4})',views.test)

      会将括号内的正则表达式匹配的内容当作关键字参数传递给后面的视图函数

    有名分组和无名分组不能混合使用,只要不混合使用,有名分组,无名分组支持多个值传参

    反向解析 

    前端反向解析
        {% url 'add' %}   add =  urls.py中路由与视图函数的name的值
    后端反向解析
        from django.shortcuts import reverse
        url(r'^testadd/$',views.testadd,name='add')
        res = reverse("add")
    无名分组的反向解析
    前端反向解析
      {% url 'add' 参数 %}
    后端反向解析
      from django.shortcuts import reverse
      url(r'^testadd/(d+)/$',views.testadd,name='add')
      res = reverse('add',args=(值,))
    有名分组反向解析
    前端反向解析
      {% url 'add' year %}
      <a href="{% url 'add' year %}"></a>
    后端反向解析
      res = reverse('add',args=(值,))
      res = reverse('add',kwargs={"year":1})

    路由分发

      总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系

      每一个app下都可以新建自己的urls.py文件

      总路由中:

        from django.conf.urls import include

        url(r'^app01/',include(app01_urls))

      子路由总安装总路由中的写法,匹配视图函数

    名称空间

      可以给incclude中的app命名一个名称空间

      url(r'^app01/',include(app01_urls, namespace='app01'))

    伪静态

      假装自己的路径是一个静态文件的路径,其实文件名是通过视图函数处理的,内容还是动态添加

    虚拟环境

      每个项目用到的模块不一样,为了让每一个项目都有仅仅属于自己的解释器

      使用:新建项目的时候选择虚拟环境创建解释器

         勾上Make available to all projects表示你创建的虚拟环境九年被其他新项目使用

    django2.0和django1.0的区别

      1.0中的url对应2.0里的re_path

      2.0中的path第一个参数是精准匹配

      2.0中的转换器

        1.0版本的url和2.0版本的re_path分组出来的数据都是字符串类型

        str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式

        int,匹配正整数,包含0

        slug,匹配字母、数字以及横杠、下划线组成的字符串

        uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00

        path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

    自定义转换器
    class MyCon:
      regex = '[0-9]{4}'
      def to_python(self,value):
        return int(value)
      def to_url(self,value):
        return '%04d' % value

    from django.urls import register_converter
    register_converter(MyCon,'yyyy')

    path('test/<yyy:year>', views.re_test,name='test')

    当APPEND_SLASH=False 浏览器不会自动增加反斜杠

    视图层(view.py)

      HttpResponse  >>>  返回字符串

      render  >>>  支持模板语法,渲染页面,并返回给前端

      redirect  >>>  重定向

      上面的方法返回的都是HttpResponse对象

      JsonResponse  >>>  返回json格式的数据

    FBV和CBV

      FBV:基于函数的视图

      CBV:基于类的视图

    from django.views import View
    
    class Login(View):
      def get(self,request):
        return render(request,'login.html')
      def post(self,request):
        return HttpResponse('post')

    文件上传

      前端注意

        form表单method必须是post,enctype必须是multipart/form-data

    后端接收
    def upload(request):
      if request == 'POST':
        file_obj = request.FILES.get('myfile')
        file_name = file_obj.name
        with open(file_name,'wb') as f:
          for line in file_obj.chunks():
            f.write(line)
      return render(request,'upload.html')

    前台Post传过来的数据,包装在POST字典中
      request.POST
    前台浏览器窗口携带的数据,包装在GET字典中
      request.GET
    前台请求方式
      request.method
    post提交的数据,body体中的内容,前台会分装成name=lqz&age=18
      request.body
    取出路径
      request.path
    取出路径和数据
      request.get_full_path()
    请求头中的键值对
      request.META

  • 相关阅读:
    原:Myeclipse10+Egit+bitbucket实现版本控制
    Myeclipse10使用git
    MyEclipse 10 下在线安装插件
    转:git windows中文目录乱码问题解决
    STUN和TURN技术浅析
    原:android4.2.2蓝牙源码阅读--bluedroid部分
    原创:超简单!windows配置NDK开发环境使用JNI
    c++对象的生命周期
    C++中虚析构函数的作用
    windows 命令行下 简单好用的查看端口占用情况的方法
  • 原文地址:https://www.cnblogs.com/LinChengcheng/p/10712325.html
Copyright © 2011-2022 走看看