django雜記(cookiecutter-django / django-rest-framework序列化)
阿新 • • 發佈:2018-12-18
2018-09-26
Django Rest Framework Authentication Tutorial
urlpatterns = [
path('', views.PostList.as_view()),
path('<int:pk>/', views.PostDetail.as_view()),
]
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('posts.urls')),
]
include_app_namespace
URL namespaces¶
# 變數__file__指當前檔案(包含這個程式碼的檔案)
# os.path.abspath(__file__)) 得到檔案所在目錄
# 再來一個os.path.abspath就是上一級目錄
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
POST 請求---------> 反序列化過程-------> deserializer: Json → native datatype【data = JSONParser().parse(BytesIO(content))】 → isntance【serializer = SnippetSerializer(data=data) serializer.is_valid()# True serializer.save()】
GET 請求 ----------> 序列化過程----------> serilization : isntance(django 模型例項) → native datatype(python 原生資料型別)【serializer.data】 → Json【JSONRenderer().render(serializer.data)】,將model例項的轉為json格式response出去。
postgresql中JsonField欄位:
class JSONField(CheckFieldDefaultMixin, Field): empty_strings_allowed = False description = _('A JSON object') default_error_messages = { 'invalid': _("Value must be valid JSON."), } _default_hint = ('dict', '{}') def __init__(self, verbose_name=None, name=None, encoder=None, **kwargs): if encoder and not callable(encoder): raise ValueError("The encoder parameter must be a callable object.") self.encoder = encoder super().__init__(verbose_name, name, **kwargs) def db_type(self, connection): return 'jsonb' def deconstruct(self): name, path, args, kwargs = super().deconstruct() if self.encoder is not None: kwargs['encoder'] = self.encoder return name, path, args, kwargs def get_transform(self, name): transform = super().get_transform(name) if transform: return transform return KeyTransformFactory(name) def get_prep_value(self, value): if value is not None: return JsonAdapter(value, encoder=self.encoder) return value def validate(self, value, model_instance): super().validate(value, model_instance) options = {'cls': self.encoder} if self.encoder else {} try: # json資料進行loads json.dumps(value, **options) except TypeError: raise exceptions.ValidationError( self.error_messages['invalid'], code='invalid', params={'value': value}, )