django查漏补缺

Posted ziyide

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django查漏补缺相关的知识,希望对你有一定的参考价值。

前端
html

表单类型(input)

  1. request.POST.get(‘xxx‘,None)相关的是name和value属性值。
    name属性表示提交时候取出来的键值,value属性代表值
  2. input 类型像checkbox这种多值的,要用values = request.POST.getlist(‘hobby‘,None)
  3. input类型的checkbox和radio,还有select类型一样显示文字写在外面
  4. input属性的按钮类型则不同,包括button和submit,其value属性就是显示值。
    但是file按钮不同,file类型也算是一个按钮。其只需要一个name属性即可,value属性无用
    <input type="file" name="file" >
  5. input是file类型按钮的话,
    表单属性必须是如下
    <form action="/upload_handler" enctype="multipart/form-data" method="post">

 

javascript

1. 原生JavaScript中的this对象分三种情况
-在类中,表示实例化本身
-在普通函数中:一般为window对象。但对于事件函数,如果是函数名绑定,例如<a onclick=func> </a>,则是标签本身,否则还是window对象
-直接写在标签的响应事件中,标签本身的对象。 <input value=‘ddd‘ onclick=‘console.log(this);‘>

    function Car(color, door) {
                alert(this)
                this.showColor = function () {
                    alert(this)
                };
            } // object object
    
    
            (function () {      
                alert(this);
        })()  //windows object

总结:一句话,谁调用这个函数,函数内部的this就是谁
需要注意的是,若原生js函数里面有jquery函数,例如ajax,外层this会被内层this所覆盖。



后端
视图

    # obj = request.FILES.get(‘file‘, None) obj是django的特有类型,专门用于处理表单上传文件的uploadfile类型。一般的处理套路如下:
    f=request.FILES[image]
    with open(some/file/name.txt, wb+) as destination:
        for chunk in f.chunks(): 
            destination.write(chunk)
    #常用属性就两个:
    UploadedFile.chunks(chunk_size=None)  #返回一个生成器对象,当multiple_chunks()为True时应该使用这个方法来代替read().
  UploadedFile.name  #上传文件的name。

 

  • 返回值

 

1. 图片等属性可以指向一个url,并且可以接收图片文件数据并显示(return HttpRespone(f.read()))
2. redirect函数对于ajax提交没用
3.  redirect(‘/index‘) 和 redirect(‘index‘)的区别
  -前者跳转到127.0.0.1:8000/index
  -后者在现有url的网址后面追加index
    例如:现访问的是127.0.0.1:8000/backend,追加为:127.0.0.1:8000/backend/index

  • CBV模式

例子:CBV视图

注意:django CBV的装饰器,特别不同,要引入一个外壳

from django.utils.decorators import method_decorator
    class AssetView(View):
        @method_decorator(csrf_exempt)
        def dispatch(self, request, *args, **kwargs):
            return super(AssetView, self).dispatch(request, *args, **kwargs)
    
        @method_decorator(auth.api_auth)
        def get(self, request, *args, **kwargs):
        pass



URL

  • 在视图中获取url有如下三种方法:
获取带参数URL:request.get_all_path()
获取不带参数URL:request.path
获取主机地址:request.get_host()

 

  • 一类url对应一个视图函数
#普通版    
url(r^(d+)_(d+)_(d+)$, views.test),
    def test(request, n1, n2, n3):
        pass
#命名正则版:
        url(r^(?P<love1>d+)o(?P<love2>d+)o(?P<love3>d+)$, views.test2),
        def test2(request, love1, love2, love3):
            pass
            
  • 多个url对应一个视图

利用是‘子类’在前,‘父类’在后,并且使用**kwargs接收

url(r^(?P<type>type_[1-3]), views.index),
url(r^$, views.index),
  •  反向生成url
    需要借助url的name参数
url(r^home/$, views.home, name="homeee"),
    # html
<form action="{% url  ‘homeee‘  %}" method="POST">
---------------------------------------------------------------------

#视图中的使用reverse函数得到网址,常用于多个url对应一个视图的情况
    from django.core.urlresolvers import reverse

        if kwargs:
            base_url = reverse(index, kwargs=kwargs). #kwargs参数接收 一个字典,代表命名正则的名 和 对应的值。
        else:
            base_url = /



---------------------------------------------------------------------

例如: 反向生成all/1.html

# 默认版
url(all/(d+).html$,home.index,name=index)
{%url "index" 1%} # 在html中
reverse(index,kwargs=(1,)) # 在view中

# 命名正则版
url(all/(?<my_id>d+).html$,home.index,name=index)
{%url "index" my_id=1%} # 在html中:
reverse(index,kwargs={"my_id":1}) #在view中

 

文件

1. django默认的BASE_DIR目录是总项目文件夹下的,所以可以不用拼接绝对路径,
因为django不用绝对路径。
例如: path = os.path.join(‘upload‘, obj.name)
只要保证总目录下有个upload文件夹即可


orm

  • 常用‘字段参数’

 

 null                # 是否可以为空
default             # 默认值
primary_key         # 主键
db_column           # 列名
db_index            # 索引(db_index=True)
unique              # 唯一索引(unique=True)
unique_for_date     # 只对日期索引
unique_for_month    # 只对月份索引
unique_for_year     # 只对年做索引
auto_now            # 创建时,自动生成时间
auto_now_add        # 更新时,自动更新为当前时间。创建后则不能被修改

 

 

 

    
    #
    models.User.objects.create(name=qianxiaohu,age=18) # 第一种
    dic = {name: xx, age: 19}                      # 第二种
    models.User.objects.create(**dic)    # **dic
    obj = models.User(name=xiao,age=18)                # 第三种
    obj.save()
    #
    models.User.objects.filter(id=1).delete()
    #
    models.User.objects.filter(id__gt=1).update(name=alex,age=84)
    dic = {name: xx, age: 19}
    models.User.objects.filter(id__gt=1).update(**dic) #更新优于a=User.objects.get(id=1); k.uname=‘ziyi‘  k.save()
    #
    models.User.objects.filter(id=1,name=root)
    models.User.objects.filter(id__gt=1,name=root)# 大于
    models.User.objects.filter(id__gte=1)           # 大于等于
    
    
    models.User.objects.filter(id=1,name=root)
    dic = {name: xx, age__gt: 19}
    models.User.objects.filter(**dic)  # 这里也可以传字典,增删改查都可以加字典
    #获取数据集的三种方式
    v1 = models.Business.objects.all()    #QuerySet类型 ,内部元素都是对象(对象内类似字典结构)
    v2 = models.Business.objects.all().values(id,caption)    #QuerySet ,内部元素都是字典 
    [{id:1,caption:运维},{id:1,caption:运维},{id:1,caption:运维}]
    v3 = models.Business.objects.all().values_list(id,caption)   #QuerySet ,内部元素都是元组
    [(1,运维),(2,开发)]
   ---------------------------------------------------------------------------------------------
    models.Business.objects.get(id=1) 获取到的一个对象,如果不存在就报错
obj = models.Business.objects.filter(id=1).first() 对象或者None

 

  • 查询

 

1. 其他查询函数(only,exclude)
#only函数,只拿选定的字段
models.Trouble.objects.filter(id=nid).only(id,title,detail)
 #exclude函数,排除指定条件的部分
Permission2Action.objects.filter().exclude(p__menu_isnull =True)

 

 2. Q查询
注意:filter 的 != 条件应该使用Q查询
技术分享图片

 

  •  联合唯一
    class Meta:
            unique_together = (field1, field2,)
        
        #对应到 mysql 中的 SQL , 类似如下的语句
        CREATE UNIQUE INDEX index_name ON tablename(field1, field2);

  • 多表查询连接
    多表查询
    models.User.objects.all().select_related(BookInfo)
#select * from User left join BookInfo on User.id = BookInfo.uid

 

  •  注意点

1. 更新表数据有‘时间字段’时,不能借由参数更新

obj = UserGroup.objects.filter(id=1).update(caption=CEO) # 错误,不支持参数更新。
#正确的做法:
obj = UserGroup.objects.filter(id=1).first() # 自动更新时间需要这样写
obj.caption = "CEO"
obj.save()

 

 

模板

 





































以上是关于django查漏补缺的主要内容,如果未能解决你的问题,请参考以下文章

django查漏补缺

第四周查漏补缺

20165329 第一周查漏补缺

JavaScript查漏补缺 —数组中filter()方法

webpack5 - 查漏补缺 2

webpack5 - 查漏补缺 2