26. Django里QuerySet的get和filter方法的區別?
1) 輸入參數
get 的參數只能是model中定義的那些字段,只支持嚴格匹配。
filter的參數可以是字段,也可以是擴展的 where查詢關鍵字,如 in,like 等。
2) 返回值
get返回值是一個定義的 model 對象。
filter返回值是一個新的 QuerySet 對象,然后可以對 QuerySet 在進行查詢返回新的 QuerySet 對象,支持鏈式操作,QuerySet 一個集合對象,可使用迭代或者遍歷,切片等,但是不等於 list 類型(使用一定要注意)。
3) 異常
get只有一條記錄返回的時候才正常,也就說明 get 的查詢字段必須是主鍵或者唯一約束的字段。當返回多條記錄或者是沒有找到記錄的時候都會拋出異常。 filter 有沒有匹配的記錄都可以
27. django 中當一個用戶登錄 A 應用服務器(進入登錄狀態),然后下次請求被 nginx 代理到 B 應用服務器會出現什么影響?
如果用戶在A應用服務器登陸的session數據沒有共享到B應用服務器,那么之前的登錄狀態就沒有了。
1.安裝django-cors-headers,之后在settings.py中配置
pip install django-cors-headers
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', # 注意順序
...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
'*'
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
)
2.使用JSONP
使用Ajax獲取json數據時,存在跨域的限制。不過,在Web頁面上調用js的script腳本文件時卻不受跨域的影響,JSONP就是利用這個來實現跨域的傳輸。因此,我們需要將Ajax調用中的dataType從JSON改為JSONP(相應的API也需要支持JSONP)格式。
JSONP只能用於GET請求。
3.直接修改Django中的views.py文件
修改views.py中對應API的實現函數,允許其他域通過Ajax請求數據:
def myview(_request):
response = HttpResponse(json.dumps({“key”: “value”, “key2”: “value”}))
response[“Access-Control-Allow-Origin”] = “*”
response[“Access-Control-Allow-Methods”] = “POST, GET, OPTIONS”
response[“Access-Control-Max-Age”] = “1000”
response[“Access-Control-Allow-Headers”] = “*”
return response
28. Django對數據查詢結果排序怎么做,降序怎么做,查詢大於某個字段怎么做?
- 排序使用order_by()
- 降序需要在排序字段名前加-
- 查詢字段大於某個值:使用filter(字段名_gt=值)
更多騷操作:
models.Tb1.objects.filter(id__lt=10, id__gt=1) # 獲取id大於1 且 小於10的值
models.Tb1.objects.filter(id__in=[11, 22, 33]) # 獲取id等於11、22、33的數據
models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
models.Tb1.objects.filter(name__contains="ven") # 獲取name字段包含"ven"的
models.Tb1.objects.filter(name__icontains="ven") # icontains大小寫不敏感
models.Tb1.objects.filter(id__range=[1, 3]) # id范圍是1到3的,等價於SQL的bettwen and
類似的還有:startswith,istartswith, endswith, iendswith
date字段還可以:
models.Class.objects.filter(first_day__year=2017)
29. 生成遷移文件和執行遷移文件的命令是什么?
python manage.py makemigrations
python manage.py migrate
30.uWSGI與uwsgi區別
uWSGI是一個 Web 服務器,它實現了WSGI 協議、uwsgi、http 等協議。注意 uwsgi 是一種通信協議,而 uWSGI 是實現 uwsgi 協議和 WSGI 協議的Web 服務器。uWSGI 具有超快的性能、低內存占用和多app 管理等優點,並且搭配着 Nginx就是一個生產環境了,能夠將用戶訪問請求與應用 app 隔離開,實現真正的部署。相比來講,支持的並發量更高,方便管理多進程,發揮多核的優勢,提升性能。