22.01.02 backend/user/seoyoon models.py 작업 시작
2022. 1. 2. 17:42ㆍ작업/Django
- CASCADE : ForeignKeyField를 포함하는 모델 인스턴스(row)도 같이 삭제한다. SQL에 상응하는 내용 : CASCADE.
12345from django.db import modelsclass TestModel(models.Model):passclass FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.CASCADE)cs - PROTECT : 해당 요소가 같이 삭제되지 않도록 ProtectedError를 발생시킨다. SQL에 상응하는 내용 : RESTRICT.
12345from django.db import modelsclass TestModel(models.Model):passclass FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.PROTECT)cs - SET_NULL : ForeignKeyField 값을 NULL로 바꾼다. null=True일 때만 사용할 수 있다. SQL에 상응하는 내용 : SET NULL.
12345from django.db import modelsclass TestModel(models.Model):passclass FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.SET_NULL, null=True)cs - SET_DEFAULT : ForeignKeyField 값을 default 값으로 변경한다. default 값이 있을 때만 사용할 수 있다. SQL에 상응하는 내용 : SET DEFAULT.
123456789from django.db import modelsclass TestModel(models.Model):passDEFAULT_TEST_MODEL_PK = 1class FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.SET_DEFAULT, default=DEFAULT_TEST_MODEL_PK)cs - SET() : ForeignKeyField 값을 SET에 설정된 함수 등에 의해 설정한다. 이것은 SQL 표준의 일부가 아니며 Django가 전적으로 처리합니다.
12345678910from django.db import modelsclass TestModel(models.Model):title = models.CharField(max_length=100)def set_FK_Model_test():return TestModel.objects.get(id=1)class FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.SET(set_FK_Model_test))cs - DO_NOTHING : 아무런 행동을 취하지 않는다. 참조 무결성을 해칠 위험이 있어서 잘 사용되지는 않는다. SQL에 상응하는 내용 : NO ACTION.
12345from django.db import modelsclass TestModel(models.Model):passclass FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.DO_NOTHING)cs migration : 장고 모델에 (여기선 방금 만든 것) 변화가 생겼다는 걸 알려줌
migrate : 실제 데이터베이스에 모델 추가 반영
생성이 잘 된 것을 확인할 수 있다.
장고에서 Swagger적용 drf-yasg
https://velog.io/@max-sum/Django-Swagger-%EA%B8%B0%EB%B3%B8%ED%8E%B8
이 밑은 config/urls.py
"""config URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.2/topics/http/urls/
"""
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls import url
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
from rest_framework.permissions import AllowAny
from rest_framework import routers,permissions
# 2. URL 매핑 : url.py 추가
# django에서 url.py는 URL 과 view 를 매핑하는 역할을 수행합니다. 프로젝트/앱은 각각의 url.py를 가질 수 있습니다.
# 프로젝트 내 url.py에 모든 URL 매핑을 수행하는 것 보다, 프로젝트는 앱들의 url을 포함하고 각각의 앱에서 디테일한 URL 매핑이 이뤄질 수 있도록 구현하는 것이 더 편리합니다.
schema_url_patterns = [ # swagger에서 API 문서로 보고싶은 URL들을 정의합니다.
path('user/',include('user.urls')),
]
schema_view = get_schema_view(
openapi.Info(
title="sixman-user", # 프로젝트 이름
default_version='v1', # 프로젝트 버전 ex) 1.1.1
description="식스맨 유저 Open API", # 설명
terms_of_service="https://www.google.com/policies/terms/",
# contact=openapi.Contact(email="이메일"),
# license=openapi.License(name=""),
),
# validators=['flex'],
public=True,
permission_classes=(AllowAny,)
# patterns = schema_url_patterns, 오류 떠서 주석처리 해놓음
)
app_name = 'user'
# urlpatterns = [
# path('admin/', admin.site.urls),
# ]
urlpatterns = [ # swagger를 보기 위한 엔드포인트를 정의합니다.
# include() 함수는 다른 URLconf들을 참조할 수 있도록 해주고 Django가 함수 include()를 만나게 되면 설정된 url(/apps) 뒤의 url들에 대한 처리를 위하여 app.urls.py인 URLconf로 전달하는 역할을 합니다.
# 기본적으로 URL관련한 구조를 살펴보면 localhost:8000/user의 경우
# 1. urls.py(jackerlab_django/urls.py)의 설정을 확인하고 여기의 /user 설정에 따라
# 2. user/urls.py를 바라보게되고
# 3. user/urls.py의 URL 설정에 따라 동작을 하게 됩니다.
#django앱
path('admin/', admin.site.urls),
path('user/', include('user.urls')),
# 첫번째 파라미터인 'route'에는 URL route에서 사용된 경로를 지정하고, 두번째 파라미터인 'view' 는 해당 URL에 매핑되는 View를 지정합니다.
#swagger
path(r'swagger(?P<format>\.json|\.yaml)', schema_view.without_ui(cache_timeout=0), name='schema-json'),
path(r'swagger', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
path(r'redoc', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc-v1'),
]
python3 manage.py runserver하니까 밑에같은 에러 뜸
+ python3 manage.py showmigrations로 확인해보니 user만 migrate했었으니 sessions도 migrate해준다.
+ 만약 migrate에서 또 에러가 뜬다면 아래로 해결해보자
user페이지는 잘 나온다. 단 user/뒤에 /붙여야지 나오더라
config/ursl.py 아까 위에처럼 써서 swagger만들기
오..뜨긴 떴다 그런데 내것이 아니고 예시인듯
그리고 커밋하자
+
'작업 > Django' 카테고리의 다른 글
22.01.03 아부지 생일 ㅋㅋ 및 리엑트설치 & 장고랑 연동해보기 (0) | 2022.01.03 |
---|---|
22.01.02 FBV와 CBV가 뭘까 / django-cors-headers / serializer 공부 (0) | 2022.01.03 |
21.12.27 MySQL과 WSL2 Django와 연동하기 / MySQL 계정 생성,접속,삭제 (0) | 2021.12.28 |
21.12.27 Django 튜토리얼 Part4 폼 쓰기, 제너릭 뷰 사용 (0) | 2021.12.27 |
21.12.27 Django 튜토리얼 Part3 뷰(페이지) 추가하기 (0) | 2021.12.27 |