zoukankan      html  css  js  c++  java
  • DJANGO 28

    url函数:url('^index/$',views.index,{'msg':'默认参数'},name='路由别名")

    有名无名分组:/page/10/1

    路由层:'^page/(d+)/(d+)/$' 视图层def page (request,n1,n2)  n1=10,n2=1

    路由层:'^page/(?P<num>d+)/(?P<id>d+)/$'

    视图层:def page(request,id,num)  num =10,id=1

    注:有名无名不能混用

    路由分发:

    有多个app 1.创建app:startapp app_name 

    2.配置,在settings中配置app信息 在应用子级目录下创建urls.py

    主路由:url('^app01/',include('app01.urls',namespace='app01'))

    子路由:url('^login/$',views.login,name='login')

    访问:/app01:login/

    4.反向解析:{% url 'app01:login' [参数们] %}

    reverse('app01:login'[,args=() |kwargs={}])

    5.2.x新特性:url,include,re_path,path

    re_path同url

    path采用的是绝对字符串匹配path('index/',views.index,name='indedx'')

    path:str|int|slug|uuid|path 语法:

    path('page/<int:id>/',...)

    自定义转换器:1.按格式自定义转化器类

    2.注册自定义转化器类并起转化器名

    3.在路由中用转化器名进行匹配

    6.多app共存问题

    路由问题:import app01.views as app01_view |路由分发

    模板问题:在templates文件夹下建立与应用名相同的文件夹,将该应用的模板文件放置自己应用名文件夹下,render(request,'app01/login.html')

    在各自app应用下建立与应用同名文件夹

    放置自己的模板页面

    虚拟环境

    解决版本共存

    1.用pycharm选择virtualenv创建一个纯净环境

    2.将环境copy到需要指定长期使用的文件夹下

    3.再次创建项目时,将该环境添加到pycharm环境选择中

    4.为该环境添加需要处理的版本共存包

    路由设置主页与404

    路由层:

    from django.urls import path,re_path

    urlpatterns = [ re_path('^$',root,name='root')

    # 其他路由...

    # 404配在最下方
    re_path('/$', error)]

    ## 五、2.x路由分发

    ```python
    '''
    1.无名称空间
    主路由:
    path('app01/', include('app01.urls'))
    子路由:
    path('test/', views.test)

    2.有名称空间
    主路由:
    path('app01/', include(('app01.urls', 'app01'))),
    子路由:
    path('test/', views.test, name='test')
    模板层:
    {% url 'app01:test' %}

    ## 六、伪静态

    ```python
    '''
    动态页面:数据内容会发生变化的页面
    静态页面:数据内容不会发生变化的页面
    针对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})

    模板层:
    index.html
    <a href="{% url 'article' 1 %}">第一篇文章</a>
    <a href="{% url 'article' 2 %}">第二篇文章</a>
    <a href="{% url 'article' 3 %}">第三篇文章</a>

    article.html
    <h1>第{{ id }}篇文章</h1>
    '''
    ```

    ## 七、request对象

    ```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())
    '''
    ```

    ## 九、文件上传

    ```python
    '''
    前端: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('上传成功')
    '''

  • 相关阅读:
    Antenna Placement---poj3020(最大匹配)
    Strategic Game--hdu1054(最小覆盖点)
    Oil Skimming---hdu4185(最大匹配)
    Windows平台下NS2网络仿真环境的搭建
    视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比
    最简单的基于FFMPEG+SDL的音频播放器
    FFplay源代码分析:整体流程图
    图解FFMPEG打开媒体的函数avformat_open_input
    100行代码实现最简单的基于FFMPEG+SDL的视频播放器
    视频编码标准汇总及比较
  • 原文地址:https://www.cnblogs.com/suncunxu/p/10450751.html
Copyright © 2011-2022 走看看