• django 视图


    django 的视图 即为view
    CBV 和 FBV
    FBV (function based view)
    CBV (class based view )
    CBV的写法:
    from django.view import View
    class Add Publisher(View):
    def get(self,request):
    return render
    def post(self,request):
    return rennder
     
    在url中的使用:
    url(r"^add_publisher/",views.AddPublisher.as_view())
    CBV简单的流程:
    1 Addpublisher.as_view ------>> view的函数  
    2当请求到来的时候才执行view函数
    1 实例化AppPublisher ---->>self
    2 self.request = request
    3执行self.dispatch(request,*args,**kwqrgs)
    1请求方式是否被允许
    handler = getattr(self,request.as_view())
    通过反射来获取对应的方法
    2执行获取到的方法 get(request) 或者post(request)
    3 得到HttpResponse对象,返回给self.dispath
    4,得到HttpResponse对象,返回django对象
     
     
    装饰器的用法:
    1,给get 和 post加普通的装饰器
    使用method_decorator
    使用时导入
    1,给get和post加method_decorator加上
    2#(这里比较方便)
    def dispatch(self, request, *args, **kwargs):
        print('执行get方法之前')
        ret = super(Addclass, self).dispatch(request,*args,**kwargs)
        print('执行get方法之后')
        return ret
    dispatch方法来做装饰器,给他加就可以了
    3在类上加装饰器(必须这么加)
    # from django.utils.decorators import method_decorator
    #
    # @method_decorator(wrapper,name='post')
    # @method_decorator(wrapper,name='get')
    class 名字
    request:
    request.method ----->>请求方式8种 GET,POST,PUT,DELETE,OPTIONS
    request.GET ----->> 字典 url 上携带的参数
    rquest.POST ----->>> form 表单通过POST请求提交的数据
     
    request,   类
    request.path_info   返回用户访问url ,不包括域名
    request.body  byte类型request.POST 的数据是从body里面提取的
    request.scheme  请求方案的字符串(http https)
    files:
    注意在html中的使用
    <form action="" method="post"  enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="file_name"></inpt>
        <button type="submit">提交</button>
    enctype必须要写的   还有file_name
    在views中
    def upload(request):
        if request.method == 'POST':
            print(request.POST)
            print(request.FILES)
            file_obj = request.FILES.get('file_name') 获取到文件的对象
            with open(file_obj.name,'wb')as f:
                for chunk in file_obj.chunks():   #内存中获取
                    f.write(chunk)
        return render(request,'upload.html')
    request.get_host()   获取host
    request.get_ul_path()   返回path url中的如"/music/bands/the_beatles/?print=true"
    request.is_secure()      如果返回的是True  即是https返回的
    request.is_ajax()         是否使用ajax技术
     
     
    ret = HttpResponse('OK')
        print(ret.content)     响应的内容
        print(ret.charset)   响应内容的编码
        print(ret.status_code)   响应的状态码
    reponse:
    from django.shortcuts import  render,HttpResponse,redirect
    HttpResponse      ---->>>浏览器显示字符串
    render(request,'模板名字',{})   ___>>> 返回整个页面
    redirecr(URL)      _____>>>跳转 重定向 location:url
     
    jsonResponse
    from django.http.response import JsonResponse
    JsonnResponse(data)
    content_type: application/json  这样使用在浏览器的头部会显示json,如果使用
    另外的json的话会需要转化
     
    基本的格式:
    from django.conf.urls import url
    urlpatterns = [
         url(正则表达式, views视图,参数,别名),
    ]
    实例:
    from django.conf.urls import url
    from . import views
     
    urlpatterns = [
        url(r'^articles/2003/$', views.special_case_2003),
        url(r'^articles/([0-9]{4})/$', views.year_archive),
        url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
        url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
    ]
    在2.0中将url改为了 path
    注意事项:
    urlpatterns的元素从上向下匹配正则^  和 $ 确保唯一
    若要在url中捕获一个值,只需要在他的周围放置一对括号(分组括号)
    不需要再前边添加括号
    每个正则面前加^  后边加$
     
    是否开启url方问地址后面不为/跳转至带有的/的路径的配置项
    APPEND_SLASH=True    如果改为false  则必须要加/
    使用正则匹配,需要满足正则才能执行后边的视图函数
    在使用()时候注意括号中的事变量:*arg,**kwargs
    url(r'^articles/([0-9]{4})/([0-9]{2})/', views.article_detail),
    可以在页面中获取id的方法;
    href="/del_class/{{ cls.id }}"
    在url中:
    url(r'^add_class/(d+)/',views.Addclass.as_view())
    在函数中:
    需要传输相应的变量,并且不用使用get获取值
    使用分组时,无名的用arg取,有名的kwarg
    使用函数时候的默认值:
    # urls.py中
    from django.conf.urls import url

    from . import views

    urlpatterns = [
        url(r'^blog/$', views.page),
        url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
    ]

    # views.py中,可以为num指定默认值
    def page(request, num="1"):
        pass
    在分页的时候用,如果没有值,则默认第一页
     
     
     
     

  • 相关阅读:
    去掉字幕文件里的时间轴信息
    Git常用命令笔记
    VMware machine里的文件
    C# Inventor二次开发—004—创建二维草图(2)
    C# Inventor二次开发—003—创建二维草图
    C# Inventor二次开发—002—启动Inventor及零部件创建和打开
    C# Inventor二次开发—001—准备工作
    UTF-8 BOM编码格式文件对SSI的影响
    滚动到顶部
    如何理解 “私有成员只有在声明它们的类和结构体中才是可访问的” ?
  • 原文地址:https://www.cnblogs.com/lnrick/p/9692940.html
Copyright © 2020-2023  润新知