본문 바로가기

[장고 기본 개념 총정리][django]

by Jyujae 2022. 4. 26.

1. 간략한 구조

웹에서의 event (url 클릭, 데이터 수신 등) -> request형태로 서버에 들어옴

url despatcher가 url을 분석 -> view로 보냄

view -> 데이터를 어떻게 다룰건지, 어떤 데이터베이스로 접근할 것인지를 model에게 넘겨줌

model -> db와 함께 이를 처리 후 model로 다시 넘김-> 다시 view로 넘김

view -> template으로 이를 넘겨주고, html페이지를 통해서 시각화됨

2. Project/ App

-project와 app


project는 하나의 웹사이트라고 생각
각각의 project 안에 function 존재, 기능들을 하는 app들이 존재

django-admin startproject 프로젝트이름

python manage.py startapp 앱이름


3. setting

-1 가장 상단의 폴더

- settings.py에 INSTALLED_APPS=[] 형태로 추가한 app들을 꼭 넣어줄것!

- urls.py에 path('jstagram/', include('jstagram.urls')),로 세팅해서, jstagram이라는 앱 뒤에 오는 url 주소들은 jstagram의 urls.py에서 다룰 수 있게 나눠준다

- path('',RedirectView.as_view(url='/jstagram/'), name='root'), 


-> 메인 페이지 접속하면 바로 jstagram으로 이동하게 해줌  


-2 각자의 앱 폴더

- admin.py

관리자 페이지

- apps.py

AppConfig를 통해 앱의 이름 지정

-forms.py

사용자가 보내는 데이터를 통과시켜주는 매개체

- models.py

python manage.py makemigrations 앱이름

python manage.py migrate 앱이름

해야 서버에 반영됨

Post, Comment, Tag 등을 설계할 때 사용

Foreginkey, Field 등을 설계 가능

ex)
class Post(models.Model):
    author=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    message=models.TextField(
        validators=[MinLengthValidator(10)]
        #최소 10글자 입력
    )
    photo=models.ImageField(blank=True, upload_to='jstagram/post/%Y/%m/%d') 

    #db에 photo를 만듦/ upload_to에 문자열, 함수 가능
    is_public=models.BooleanField(default=False, verbose_name='공개 여부')
    created_at=models.DateTimeField(auto_now_add=True) 
    updated_at=models.DateTimeField(auto_now=True)


- urls.py

ex) urlpatterns=[path('<int:pk>/delete/', views.post_delete, name='post_delete'),] 

url 주소를 직접 설계

- views.py

함수 기반 뷰(def), class 기반 뷰 모두 사용 가능


데이터를 작성된 로직에 따라 처리하고, 필요한 모델을 불러와서 html로 보냄

4. templates

layout.html로 기본적인 틀과 형태, 디자인을 구성해놓고

{% extends 'jstagram/layout.html' %}

{% block content %}
안에 html 태그를 작성
{% endblock %}


5. 작업 flow

 

models를 기준으로,
views.py에서 로직을 구현하고,
urls.py에서 urlpatterns을 통해 주소를 지정해주고 html 파일로 연결해주고,
templates에서 html 만들자