Django-2

1.获取多个数据及文件的上传和接收

  • request.POST
  • request.GET
  • request.FILES
  • request.POST.getlist()

注意: 上传文件form的特殊设置:

<form action="" method="POST" enctype='multipart/form-data' >
<input type="file">
</form>
# 接收file文件
obj = request.FILES.get('fafafa')
f = open(obj.name, mode='wb')
for item in obj.chunks():
    f.write(item)
f.close()

2.CBV(class base view)和FBV(function base view)

其中CBV可以调用dispatch方法给请求前后都加上功能

class Order(views.View):
    def dispatch(self, request, *args, **kwargs):
	    print('somethings')
        res = super(Order, self).dispatch(request, *args, **kwargs)
        return res
    

3.jinjia2渲染模版语言

1.传入值为字典

<ul>
    {% for k, v in dict.items %}
    	<li>{{k}}-{{v}}</li>
    {% endfor %}
</ul>

2.传入为tuple或list

<ul>
    <li>{{tuple.0}}</li>
    <li>{{tuple.1}}</li>
    <li>{{tuple.2}}</li>
    <li>{{tuple.3}}</li>
</ul>

4.通过include做路由分发

url(r'^cmdb', include("app01.urls"))
url(r'^monitor', include("app02.urls"))

# url变化 -> ip:port/cmdb/...
#  			ip:port/monitor/...

5.orm框架链接mysql的配置

1.配置setting.py

DATABASES = {
'default': {
   'ENGINE': 'django.db.backends.mysql',
   "NAME": 'dbname',
   'USER': 'root',
   'PASSWORD': 'XXX',
   'HOST': "localhost",
   'PORT': '3306'
}
}

2.在大目录的__init__.py中改成Mysql引擎

import pymysql 
pmysql.install_all_as_MySQLdb()

6.Django中字段的介绍

  1. CharField:用于存储字符串类型的数据,最大长度为255个字符。
  2. TextField:用于存储长文本数据,最大长度为无限制。
  3. IntegerField:用于存储整数类型的数据,可以指定最小值和最大值。
  4. FloatField:用于存储浮点类型的数据。
  5. DecimalField:用于存储精确的十进制数,可以指定最大小数位数。
  6. BooleanField:用于存储布尔类型的数据,只能存储True或False。
  7. DateTimeField:用于存储日期和时间类型的数据。
  8. DateField:用于存储日期类型的数据。
  9. TimeField:用于存储时间类型的数据。
  10. EmailField:用于存储电子邮件地址类型的数据。
  11. URLField:用于存储URL类型的数据。
  12. FileField:用于上传文件类型的数据,存储文件路径。
  13. ImageField:用于上传图片类型的数据,存储图片路径。
  14. ForeignKey:用于关联模型之间的关系,表示一对多的关系。
  15. ManyToManyField:用于关联多个模型之间的关系,表示多对多的关系。
  16. OneToOneField:用于关联两个模型之间的关系,表示一对一的关系。

7.单表的增删改查

增
models.User.objects.create(name='qianxiaohu',age=18)
dic = {'name': 'xx', 'age': 19}
models.User.objects.create(**dic)


obj = models.User(name='qianxiaohu',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)
查
models.User.objects.filter(id=1,name='root')
models.User.objects.filter(id__gt=1,name='root')
models.User.objects.filter(id__lt=1)
models.User.objects.filter(id__gte=1)
models.User.objects.filter(id__lte=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 ,内部元素都是对象

8.一对多关系

1.Foreign key

user_group = models.ForeignKey('UserGroup', to_field='uid', default=1)
# 1. 在数据库中创建的字段是user_group_id. 表示关联id
# 2. user_group表示对象. 可以对Usergroup进行跨表操作

2.增删改查操作

models.UserInfo.objects.create(username="root", 
                              password="123",
							user_group_id=2  # user_group则需要传对象
                              )
# QuerySet ,内部元素都是字典
v2 = models.Business.objects.all().values('id','caption')
# QuerySet ,内部元素都是元组
v3 = models.Business.objects.all().values_list('id','caption')

# 获取到的一个对象,如果不存在就报错
models.Business.objects.get(id=1)
对象或者None = models.Business.objects.filter(id=1).first()


外键:
    v = models.Host.objects.filter(nid__gt=0)
    v[0].b.caption  ---->  通过.进行跨表