zoukankan      html  css  js  c++  java
  • url函数。有名无名分组,别名, 路由分发,反向解析,2.x新特性,伪静态,上传文件

    1,from djiango.conf.urls import url

    from  djiango.urls  import include,path,re_path 

    url('^index/$',view .index ,{'msg':msg})

    在2.x新版本下

    有了path,re_path,path是默认将里面当字符串匹配,re_path是用法同url  并且namespace设置  (include('app.urls','app'), namespace=app

    可将404设置放在最后^/$  

    有五个类型转换器

    <str:msg>  <int:msg>  <;msg>

    str:匹配除路径分隔符(/)外的字符串,默认

    -- int:匹配自然数

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

    -- uuid:匹配uuid形式的数据

    -- path:匹配任何字符串,包括路径分隔符(/) (不能用?)

     index/<str:msg>/  msg在视图函数接受作为参数

    主路由分发不能用正则语法2.x用path 

     默认匹配不上加/匹配。可设置APPEND_FLASH=FALSE取消   加参数后视图函数  , kwargs={'msg':msg}

    2.有名无名分组  (不可以混用)

    ^page/(d+)/$  视图层 def index(request,n)   reverse('index', args=(n,)

    ^page/(?P<num>d+)/$  视图层 def index(request,num)     url=reverse('index(别名)',kwargs={'num':num}  return (url) 加别名才能反向解析

    3,

    url(r'^app/',include('app.urls',namespace= 'app')),

     创建多个app

    在tool下startapp app01

    terminal下     django-admin startapp app01 或者python3 manage.py startapp app02

    4数据库

    先在右侧添加数据库,在dj01的init下 import pymysql    mysql.install_as_MySQLdb()

    然后迁移数据库tool下makemigrations   migrate

    5自定义转换器

    语法:

    1.自定义类

    # 匹配11位的185电话

    class CVT185phone:

    # 匹配过程

        regex = '185d{8}'

        def to_python(self, value):

            return int(value)

    # 反解过程

        def to_url(self, value):

            return '%11d' % value

    # 在主路由中

    from django.urls import register_converter

    from 所在路径 import CVT185phone

    register_converter(CVT185phone, 'phone185')

    path('page/<phone185:msg>/', views.page, name="pages")

    '''

    6上传文件

    前端:upload.html页面
    1.往自身路径发送post请求,要将第四个中间件注释
    2.multipart/form-data格式允许发送文件
    3.multiple属性表示可以多文件操作
    <form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="files" multiple="multiple">
    <input type="submit" value="上传">
    </form>

    后台:re_path('^upload/$', upload)
    def upload(request):
    if request.method == "GET":
    return render(request, 'upload.html')
    if request.method == "POST":
    # 如果一个key对应提交了多条数据,get取最后一个数据,getlist取全部数据
    last_file = request.FILES.get('files', None)
    files = request.FILES.getlist('files', None)
    # import django.core.files.uploadedfile.TemporaryUploadedFile
    # file是TemporaryUploadedFile类型,本质是对系统file类封装,就是存放提交的文件数据的文件流对象
    for file in files:
    with open(file.name, 'wb') as f:
    for line in file: # 从file中去数据写到指定文件夹下的指定文件中
    f.write(line)
    return HttpResponse('上传成功')
    '''
    ```

    `python
    '''
    1. method: 请求方式
    2. GET: get请求的参数
    3. POST: post请求的参数(本质是从bdoy中取出来)
    4. body: post提交的数据(不能直接查看)
    5. path: 请求的路径,不带参数
    6. request.get_full_path(): 请求路径,带参数
    7. FILES: 文件数据
    8. encoding: 编码格式
    9. META: 数据大汇总的字典
    '''
    ```

    ## 八、FBV与CBV

    ```python
    '''
    FBV:function base views 函数方式完成视图响应
    CBV:class base views 类方式完成视图响应
    '''
    '''
    视图层:
    from django.shortcuts import HttpResponse
    from django.views import View
    class CBVView(View):
    def get(self, request):
    return HttpResponse("响应get请求")
    def post(self, request):
    return HttpResponse("响应post请求")
    路由层:
    url('^path/$', views.CBVView.as_views())

    7.伪静态页面

    动态页面:数据内容会发生变化的页面
    静态页面:数据内容不会发生变化的页面
    针对SEO(搜索引擎优化),静态页面更容易被搜索引擎网站收录
    伪静态就是讲动态页面伪装成静态页面,容易被搜索引擎网站收录,从而增加搜索概率,提高流量
    '''

    '''
    路由层:
    url('^index/$', views.index),
    url('^article/(?P<id>(d+)).html/$', views.article, name='article')

    视图函数层:
    def index(request):
    return render(request, 'index.html')
    def article(request, id):
    return render(request, 'article.html', {'id': id})

    <a href="app01/1.html">第一篇文章</a>
    <a href="app01/2.html">第二篇文章</a>
    <a href="app01/3.html">第三篇文章</a>
    <a href="{% url 'article' 4 %}">第四篇文章</a>
  • 相关阅读:
    wxpython的安装

    拓扑排序
    树,二叉树,森林,三者的转换
    二叉树的遍历
    最短路径
    图的遍历
    图的最小生成树
    哈夫曼树的应用
    哈夫曼树
  • 原文地址:https://www.cnblogs.com/wrqysrt/p/10448232.html
Copyright © 2011-2022 走看看