Django框架遗漏的部分
orm相关
过滤API
与values_list和values不同的是,only只对选定字段进行查询,返回结果是一个模型类对象,但是这个对象依然可以去查询没有指定的的字段,但是会再次去查询数据库.
与only相反的是defer,排除指定字段
响应
JsonResponse
JsonResponse内部帮我们做了序列化,但是如果safe参数设置为True,而数据并非一个字典的话就会抛出异常
class JsonResponse(HttpResponse):
def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,
json_dumps_params=None, **kwargs):
if safe and not isinstance(data, dict):
raise TypeError(
'In order to allow non-dict objects to be serialized set the '
'safe parameter to False.'
)
if json_dumps_params is None:
json_dumps_params = {}
kwargs.setdefault('content_type', 'application/json')
data = json.dumps(data, cls=encoder, **json_dumps_params)
super(JsonResponse, self).__init__(content=data, **kwargs)
多库操作
PASS
模板中生成器的问题
函数中的双层yield
def yieldi():
a = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
for i in a:
print("外部循环")
def inner():
print(i)
for j in i:
print("内部循环")
yield j
yield inner()
f = yieldi()
for i in f:
for j in i:
print(j)
模板中:
他会先执行全部的外部循环,在执行内部循环,内部打印的值都是a中最后一个值的内容,如果想像函数中一样需要显式的将a传递给inner()
from django.conf.urls import url
from django.shortcuts import HttpResponse,render,redirect
def yieldi():
a = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
for i in a:
print("外部循环")
def inner():
print(i)
for j in i:
print("内部循环")
yield j
yield inner()
def foring(reqyest):
f=yieldi()
return render(reqyest,"yieldi.html",locals())
urlpatterns = [
url(r'^aaa/', foring),
]
# 模板内容
{% for i in f %}
<p>{{ i }}</p>
{% for j in i %}
{{ j }}
{% endfor %}
{% endfor %}
QueryDict
from django.http import QueryDict
reuqest.GET和POST的数据类型,该数据类型继承了字典,默认不可以被修改.如果我们想要修改其中数据,建议是将其进行深拷贝,然后将其_mutable 属性设置为True,就可以对新的QueryDict进行修改
其设置属性同字典
def get_tag(request):
params = request.GET
print(type(params))
import copy
params = copy.deepcopy(params)
params._mutable = True
params['name] = ''
return HttpResponse('OK')
由QueryDict生成URL后的条件
QueryDictObj.urlencode()

浙公网安备 33010602011771号