zoukankan      html  css  js  c++  java
  • django 视图view

    视图里一般是函数和类,需要返回响应。

    试图分为2种:2. CBV(class base view) FBV(function base view)

    from django.views import View

    class Addclass(View):

      def get(self,request):

        pass

      def post(self,request):

        pass

    url中,也需要改变

    url(r'^add_class/$', views.AddClass.as_view()),

    2  fbv本身就是一个函数

    可以直接用函数装饰器

    但是函数装饰器不可以直接用在类的方法上,但Django中提供了menthod_decorator装饰器用于将函数装饰器转换为方法装饰器

    from django.views import View
    from django.utils.decorators import method_decorator
    
    class AddClass(View):
    
        @method_decorator(wrapper)
        def get(self, request):
            return render(request, "add_class.html")
    
        def post(self, request):
            class_name = request.POST.get("class_name")
            models.Classes.objects.create(name=class_name)
            return redirect("/class_list/")

    3 上传文件

    3. 上传文件的注意事项:

    1. 如果有上传文件,views.py中应该从request.FILES中取上传的文件对象

    2. 如果有上传文件,html文件中的form表单一定要加 enctype="multipart/form-data"

       file_obj = request.FILES.get("touxiang")  # 拿到上传文件对象
    file_name = file_obj.name # 拿到文件名
    with open(file_name, "wb") as f: # 在本地新建一个同名文件
    for line in file_obj.chunks(): # 从上传的文件对象中一点一点读取数据
    f.write(line) # 写到新建的文件中

    4  request是一个对象,是一个页面被请求时Django就会创建一个包含本次请求原信息的httprequest对象,django会将这个对象自动传递给试图函数,一般默认为用request参数承接这个对象

    request常用对象的方法:

      1 path_info        返回用户访问url ,不包括域名,也不包括参数

      2.method     请求中使用http的方法,全大写字符串表示

      3 GET     包含所有http GET 参数的类字典对象

      4 POST   包含所有http POST参数的类字典对象

      5 body    请求体,byte类型 request.POST的数据就是从body里面提取到的

    5 httprespones 响应必须是字符串,其他数据类型要其他的django方法来实现

    Django封装的一个专门用来返回JSON格式数据的方法

    from django.http import JsonResponse

    JsonResponse(字典)
    JsonResponse(列表,safe=False)


    6 接受的一个变量包含多个值的时候,比如select多选框,就用request.POST.getlist("hobby")

    7 模板语言:

     模板语言


    1. 目前已经学到的模板语言内容
    1. {{变量}}
    2. {% 逻辑操作 %}
    1. for循环
    {% for i in list %}
    {{ i }}
    {% endfor %}

    forloop.counter
    forloop.counter0

    forloop.last

    {% empty %}

    2. if判断
    {% if 条件 %}
    条件成立要做的事儿
    {% else %}
    条件不成立要做的事儿
    {% endif %}
    3. 逻辑判断
    1. in 判断
    2. == 判断

    8  模板语言的相关一些变量:

    1. 模板语言变量相关
    1. 字典的key对应的值
    {{ dic.key}}
    2. 列表按索引取值
    {{ list.1 }}
    3. 对象的属性和方法
    {{ obj.name }}
    {{ obj.dream }} --> 方法不要加括号

    2. Filters (对变量做一些额外的操作)
    1. 内置的filter
    2. 自定义的filter

    1. 在app下面新建一个Python package,包名必须叫 templatetags
    2. 在上面的包中新建一个python文件,里面定义函数,并且注册到django的模板语言
    from django import template
    # 生成一个用于注册自定义filter方法的实例
    register = template.Library()


    @register.filter(name="sb")
    def add_sb(value):
    return "{} sb".format(value)
    3. 使用自定义的filter方法
    {% load py文件名 %}
    {{ value|sb }}
    3. tags


    4. 母版与继承
    1. 定义母版 --> 其他很多页面会用到的共用部分 我们可以提取出来放在单独的一个html文件中
    2. 在母版中 通过定义不同的 block 等待子页面来替换对应的内容
    3. 在子页面中 通过 {% extends 'base.html '%}来继承已经定义好的母版
    4. 在子页面中通过 block 来实现自定义页面内容
    5. 通常会在母版中定义 子页面专用的 page-css 和 page-js 两个块
  • 相关阅读:
    Go 语言打包静态文件
    Go 语言编写单元测试
    从开源项目看 Python 单元测试
    从开源项目看python代码注释
    Celery 源码解析八:State 和 Result
    Celery 源码解析七:Worker 之间的交互
    Celery 源码解析六:Events 的实现
    Celery 源码解析五: 远程控制管理
    Celery 源码解析四: 定时任务的实现
    覆盖equals时请遵守通用约定
  • 原文地址:https://www.cnblogs.com/zhaoweihang/p/9187970.html
Copyright © 2011-2022 走看看