Go教程

2021/6/15 django基础 路由曾 视图层

本文主要是介绍2021/6/15 django基础 路由曾 视图层,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
'''
创建项目
    django-admin startproject 项目名
    python manage.py startapp app01
    installed_apps=[
        'app01',
        'app01.apps.App01Config'
    ]
    手动创建templates
    templates = [{

        'DIRS': os.path.join(BASE_DIR, 'templates')
    }]
    手动创建静态文件
    staticfiles_dirs = [
        os.path.join(BASE_DIR, 'static')
    ]
    目录结构
        xxx
            app01
                migrations
                    __init__.py
                __init__.py
                models.py
                tests.py
                apps.py
                views.py
                admin.py
            xxx
                __init__.py
                urls.py
                wsgi.py
                settings.py
            manage.py
            static
            templates
            db.sqlite3
    开启django服务
        python manage.py runserver
    静态文件
        {% load static %} 引入配置文件中 static 变量的值
        {%  static 'zzw/1' %}   此刻static代表 /static/,即合并后/static/zzw/1
    request 背过了
    django三板斧
        HttpResponse 返回字符串给前端,字符串中可以存在html语言,一样生效
        redirect    重定向
        render 返回完整html模板文件给前端,内部源码还是使用 HttpResponse

django 请求声明周期图

路由匹配
    from django.conf.urls import url
    url('re', view.xxx, name=None, kwargs=None)

    from django.urls import path, re_path
    path('绝对匹配', view.xxx, name=None)
    re_path('re', view.xxx, name=None, kwargs=None) --> url
    转换器
        <str/int/slug/uuid/path:xx>  --> **kwargs
        str: 匹配非/以外的所有非空白字符
        path:匹配所有非空白字符
        int: 正整数,包括0
        slug:数字、字母、下划线、中横线
        uuid:uuid的标准格式
    自定义转换器(可以自定义转换器,在内部书写正则,然后在url中引用、注册、调用)

    URL末尾反斜杠
    由   append_slash=Ture 控制,默认由django加上/再匹配一次
    分组命名匹配
        无名有名不能混合使用
        无名分组
            (re)  --> *args
        有名分组
            (?P<xxx>re) --> **kwargs
    反向解析
        from django.shortcuts import reverse
        reverse('name') --> ip后面的路径
        无名反向解析
            url(r'(re)')
            from django.shortcuts import reverse
            reverse('name', args=(x,))
            {% url name x %}
        有名分组反向解析
            url(r'(?P<xxx>re)')
            from django.shortcuts import reverse
            reverse('name', args=(x,))
            {% url name x %}
            reverse('name', kwargs={'xxx':xx})
            {% url name xxx=x %}
    路由分发
        每一个应用下,都可以拥有自己的templates、static、urls.py,需要自己手动创建
        from django.conf.urls import url, include
        url(r'', include('app01.urls'))
        from app01 import urls as xxx
        url(r'', include(xxx))
    名称空间
        防止多个应用下的url name名称冲突(PS:name命名使用 应用名_名称,即可避免)
        from django.conf.urls import include, url
        url(r'', include('app01.urls', namespace='app01'))
        这样,app01的url就存放在他自己的名称空间内,不会出现名称冲突了
    伪静态
        url后面都有.html结尾,即是静态网页,会增加搜索机器人的搜索频率
        url(r'xxx.html') 即可


简单的视图函数
    url(r'', views.zzw, name="zzw")
    def zzw(xxx):
        return HttpResponse('zzw')
FBV与CBV
    FBV:函数方式的视图函数
    CBV:基于类的视图
    CBV源码
        url(r'', views.xxx.as_view())
        关键在as_view(),其内部存在一个嵌套函数为view
        as_view()的返回值就是view
        view函数内部,将参数进行赋值,并返回了dispatch函数的调用
        该函数内部进行了反射操作,然后返回对应的函数调用,从而实现
        get请求来,就是调用get方法
    CBV添加装饰器
        method_decorator(login_auth, name="")
        如果放在类上面,同时指定name属性,那么就是装饰指定的方法
        如果放在类内的第一个方法上,那就是装饰所有方法
        如果放在类内的非第一个方法上面,那就是单独装饰该方法
request
    属性
        .method 返回请求方式,大写
        .POST   返回字典,POST请求中的数据,如 application/x-www-form-urlencoded,ajax
        .GET    返回字典,GET请求中的数据
            .get(k)
            .getlist(k)
        .FILES  返回字典,文件数据,如 multipart/form-data,ajax中 FormData()
        .body   返回bytes,如ajax json
        .META   返回HTTP协议头部
        .scheme 返回当前Http协议 http/https
        .path   返回当前路径,出去ip和路径参数
        .path_info  与path一致
        .encoding   返回编码方式,none代表使用浏览器的默认编码方式
        .session    返回session
        .COOKIES    返回cookies
        .user   返回当前登录的用户对象
    方法
        is_secure() 如果时https协议,返回True
        is_ajax()   如果是ajax请求,返沪True
        get_full_path() 返回ip后面的完整路径,包括路径参数
        get_host()  返回ip:port
    用户对象方法
        is_authenticated()  判断当前用户是否登录,返回bool
        set_password('xxx')
            save()
        check_password('xxx')   校验密码,返回bool
HttpResponse
    a = HttpResponse('xxx')
        a.content
        a.charset
        a.status_code
    a['Content-Type'] = 'text/html'
    del a['Charset']

from django.http import JsonResponse
JsonResponse(
data,
json_dumps_params={'ensure_ascii':False}
safe=True,
)

render
(
    request,
    'html',
    {'前端名': '后端数据'}, 简单点直接写入 locals()   将函数内的局部变量全部传递过去
    content-type
    status=200,
    using,
)
redirect
(
    url
    permanent=True
)


'''
这篇关于2021/6/15 django基础 路由曾 视图层的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!