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

  • CRUD基本操作
    详细
        
        #
        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

  •  联合唯一
    class User2Tag(model.Model):
        u=models.ForeignKey(to='User')
        t=models.ForeignKey(to='Tag')
        date = models.DateField()
        class Meta:
            unqiue_together=[
                ('u','t').  #联合唯一
            ]

猜你喜欢

转载自www.cnblogs.com/ziyide/p/9488564.html