html購物網(wǎng)站重慶關(guān)鍵詞優(yōu)化服務(wù)
目錄
裝飾器inject_serializer
裝飾器@atomic
rebase
git 清理add的數(shù)據(jù)
查看git的當(dāng)前工作目錄
makemigrations文件名稱
@action(detail=True, methods=["GET"])
如何只取序列化器的一個字段進行返回
Response和JsonResponse有什么區(qū)別
序列化器填表和單字段如何寫
序列化器里包含多對象數(shù)據(jù)-序列化器嵌套序列化器
from django.db.models import Q的Q對象有什么用,是什么
裝飾器inject_serializer
????????用于動態(tài)地將一個序列化器(serializer)注入到Django REST framework(DRF)視圖中。
舉個例子:
from blue_krill.web.drf_utils import inject_serializer@inject_serializer(body_in=serializers.SLZ1, out=serializers.SLZ2, tags=["項目A"], operation_summary="獲取B")def xxx(self, request, args):pass
以上,
body_in
: 指定請求體的序列化器,這里使用的是?serializers.SLZ1
。out
: 指定響應(yīng)體的序列化器,這里使用的是?serializers.SLZ2
。tags
: 對 API 分類,方便在生成的 API 文檔中查找(比如swagger)。這里標簽:項目A
。operation_summary
: 提供 API 的簡短描述,這里描述:獲取B。?
通過該裝飾器,可以讓?API 接口更具可讀性和規(guī)范性,同時也能方便生成 API 文檔。
在swagger中的顯示就是:
裝飾器@atomic
在 Django 中用于確保一個函數(shù)或方法在數(shù)據(jù)庫中執(zhí)行的操作具有原子性。
from django.db.transaction import atomic # transaction 即事務(wù)的意思@atomic
def create_user_and_profile(username, email, age):user = User.objects.create(username=username, email=email)profile = UserProfile.objects.create(user=user, age=age)
相當(dāng)于在視圖函數(shù)中開了個事務(wù),主要目的是維護DB的一致性和完整性。
rebase
大家可能都是常用merge去合并,這樣能保留具體的commit記錄,但對不復(fù)雜或說不大型的項目,rebase其實更簡潔干凈些。
git checkout v1
git rebase master
v1合并到master,往往還要解決沖突,就處理后git add <File>然后git rebase
git 清理add的數(shù)據(jù)
從暫存區(qū)中移除單個文件
git restore --staged <file-path>
從暫存區(qū)中移除多個文件
git restore --staged <file-path-1> <file-path-2> ...
?從暫存區(qū)中移除所有文件(原來冒紅冒黃的文件又恢復(fù)冒紅冒黃):
git restore --staged .
查看git的當(dāng)前工作目錄
場景:比如git add需要直接加文件的方式
git rev-parse --show-toplevel
makemigrations文件名稱
為讓遷移文件更加清晰目的,遷移文件往往是要命名規(guī)范的,指定生成文件名稱:
python manage.py makemigrations --name xxxx
python manage.py makemigrations -n xxxx
如果意外直接創(chuàng)建了,那么修改文件名即可,但前綴的0001這種數(shù)字不要去修改,關(guān)聯(lián)到這個文件名的name也要修改(比如一般是下一個遷移文件用到),即可。
但注意,如果已經(jīng)migrate的,那么需要在django_migration修改對應(yīng)表名,如果為migrate那就不需要。
@action(detail=True, methods=["GET"])
detail標識是否針對單個對象,
@action(detail=True, methods=["GET"]) =》 /users/{id}/get_username/
@action(detail=False, methods=["GET"]) =》 /users/get_username/
如何只取序列化器的一個字段進行返回
from rest_framework import serializers
from myapp.models import MyModelclass MyModelSerializer(serializers.ModelSerializer):class Meta:model = MyModelfields = ['field_name', 'another_field']# 假設(shè)你已經(jīng)有一個 MyModel 實例
my_model_instance = MyModel.objects.get(pk=1)# 使用序列化器序列化實例
serializer = MyModelSerializer(my_model_instance)# 獲取序列化后的數(shù)據(jù)
serialized_data = serializer.data# 僅提取名為 'field_name' 的字段
field_name_data = serialized_data['field_name']# 返回或使用 'field_name' 字段的值
return field_name_data
Response和JsonResponse有什么區(qū)別
Response
?和?JsonResponse
?都是用于構(gòu)建和返回 HTTP 響應(yīng)的 Django 類,但它們之間存在一些差異。
-
來源:
Response
?類來自 Django REST framework(DRF),通常在 DRF 視圖和 APIView 中使用。JsonResponse
?類是 Django 內(nèi)置的,用于構(gòu)建 JSON 響應(yīng)。 -
內(nèi)容類型:
Response
?類可以處理多種內(nèi)容類型(如 JSON、XML 等),默認情況下,它會根據(jù)客戶端請求的 "Accept" 頭選擇合適的內(nèi)容類型。JsonResponse
?類專門用于構(gòu)建 JSON 響應(yīng),其 "Content-Type" 頭始終設(shè)置為 "application/json"。 -
序列化:
Response
?類可以與 DRF 序列化器一起使用,自動序列化和反序列化數(shù)據(jù)。JsonResponse
?類僅處理已序列化為 JSON 的數(shù)據(jù),您需要確保傳遞給?JsonResponse
?的數(shù)據(jù)是 JSON 可序列化的(例如 Python 字典、列表等)。
如果正使用 Django REST framework 構(gòu)建 API,建議使用?Response
?類。如果您正在使用 Django 的基本視圖或類視圖,并需要返回 JSON 數(shù)據(jù),可以使用?JsonResponse
?類
序列化器填表和單字段如何寫
class HahaSLZ(serializers.Serializer):haha_id = serializers.IntegerField(required=False)class Meta:model = Userfields = [field.name for field in User._meta.get_fields()] + ['haha_id'] # 注,直接__all__并不能涵蓋haha_id
序列化器里包含多對象數(shù)據(jù)-序列化器嵌套序列化器
results該字段的類型是?AASLZ
,并設(shè)置了?many=True
?參數(shù),表示這是一個列表,其中包含多個?AASLZ
實例。
class AASLZ(serializers.Serializer):user = serializers.CharField(help_text="用戶", required=True)class BBSLZ(serializers.Serializer):results = AASLZ(help_text="用戶列表", many=True)
from django.db.models import Q的Q對象有什么用,是什么
Django 的?Q
?對象是一個用于構(gòu)建更復(fù)雜查詢的工具。它允許您在查詢中使用 OR 語句、NOT 語句以及更高級的查詢結(jié)構(gòu)。Q
?對象可以與?filter()
、exclude()
?和?get()
?等查詢方法一起使用。