22.01.02 backend/user/seoyoon models.py 작업 시작

2022. 1. 2. 17:42작업/Django

 

  1. CASCADE : ForeignKeyField를 포함하는 모델 인스턴스(row)도 같이 삭제한다. SQL에 상응하는 내용 : CASCADE.
    1
    2
    3
    4
    5
    from django.db import models
    class TestModel(models.Model):
        pass
    class FKModel(models.Model):
        test = models.ForeignKeyField(TestModel, on_delete=models.CASCADE)
    cs
  2. PROTECT : 해당 요소가 같이 삭제되지 않도록 ProtectedError를 발생시킨다. SQL에 상응하는 내용 : RESTRICT.
    1
    2
    3
    4
    5
    from django.db import models
    class TestModel(models.Model):
        pass
    class FKModel(models.Model):
        test = models.ForeignKeyField(TestModel, on_delete=models.PROTECT)
    cs


  3. SET_NULL : ForeignKeyField 값을 NULL로 바꾼다. null=True일 때만 사용할 수 있다. SQL에 상응하는 내용 : SET NULL.
    1
    2
    3
    4
    5
    from django.db import models
    class TestModel(models.Model):
        pass
    class FKModel(models.Model):
        test = models.ForeignKeyField(TestModel, on_delete=models.SET_NULL, null=True)
    cs
  4. SET_DEFAULT : ForeignKeyField 값을 default 값으로 변경한다. default 값이 있을 때만 사용할 수 있다. SQL에 상응하는 내용 : SET DEFAULT.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from django.db import models
     
    class TestModel(models.Model):
        pass
     
    DEFAULT_TEST_MODEL_PK = 1
     
    class FKModel(models.Model):
        test = models.ForeignKeyField(TestModel, on_delete=models.SET_DEFAULT, default=DEFAULT_TEST_MODEL_PK)
    cs
  5. SET() : ForeignKeyField 값을 SET에 설정된 함수 등에 의해 설정한다. 이것은 SQL 표준의 일부가 아니며 Django가 전적으로 처리합니다. 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from django.db import models
     
    class 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
  6. DO_NOTHING : 아무런 행동을 취하지 않는다. 참조 무결성을 해칠 위험이 있어서 잘 사용되지는 않는다. SQL에 상응하는 내용 : NO ACTION.
    1
    2
    3
    4
    5
    from django.db import models
    class TestModel(models.Model):
        pass
    class 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

 

Django + Swagger 기본 사용법

장고랑 스웨거랑

velog.io

 

이 밑은 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만들기

오..뜨긴 떴다 그런데 내것이 아니고 예시인듯

그리고 커밋하자

 

+

https://velog.io/@suasue/Django-%EC%8A%A4%ED%83%80%EB%B2%85%EC%8A%A4-%EB%B7%B0View-%EC%9E%91%EC%84%B11-%EC%83%9D%EC%84%B1-%EC%A1%B0%ED%9A%8C

 

Django | 스타벅스 뷰(View) 작성(1) - 생성, 조회

뷰는 작성된 모델을 바탕으로, 들어오는 데이터를 어떻게 처리할지에 대한 논리를 맡고 있다. 스타벅스 제품 모델을 작성한 것에 이어 뷰를 작성해보자.

velog.io