以下是我的观点:
@csrf_exempt
def api(request):
if request.method=="POST" and 'cmd' in request.POST and request.POST['cmd'] == "post":
try:
usr = Usr.objects.get(secret__exact=request.POST['secret'])
# ....
response = 'ok'
except Exception as ex:
response = 'fail'
return HttpResponse(response)
即使有错误的秘密,Django仍然会返回正确的对象(例如,如果我在秘密中替换了' A')。怎么了?
答案 0 :(得分:1)
它与数据库的排序有关,特别是如果您使用的是MySQL。请参阅此处的文档: https://docs.djangoproject.com/en/1.6/ref/models/querysets/#std:fieldlookup-exact
它说: 在MySQL中,数据库表的“排序规则”设置确定精确比较是否区分大小写。这是一个数据库设置,而不是Django设置。
这意味着,数据库上的设置决定了区分大小写而不是你在python中编写的内容。