티스토리 뷰
0. 들어가면서
간단히 프로젝트를 시작하는 전반적인 순서를 적어보겠다. 여기서 글을 보면서 모르는 부분은 django 카테고리에서 검색 부분에서 찾아가면서 하나씩 하나씩 프로젝트를 생성해 보자. 아래의 순서들을 보면 처음에는 기초부분으로 시작하지만, 다음 으로 넘어갈 수록 기능이 추가 되기 때문에 하나씩 하나씩 완성해본다는 생각으로 해보면 좋다.
장고 CRUD 기본 순서
- project와 app을 만들고 설정까지 한다.
- app 만들 때
INSTALLED_APPS
가서 꼭 적자.
-
templates 안에 base.html 만든다.(templates는 프로젝트폴더의 바로 하위 폴더)
{% block body %} {% endblock %}
-
url 분리한다.
- iclude 적어주는 것을 잊지 말자.
- urls 안에 path('articles/', include('articles.urls')), 적을 때 작은 따옴표 잊지말자.
- app 안에 url.py 생성하고 만들 때, 비어있어도 꼭 urlpatterns을 적어주자.
- models.py
- medels.py 자체에 설계도를 생성하고(CharField, TextField, DateTimeField)
- migration 으로 DB에 적용
- mitrate로 저장한다
- showmigrations 로 적용 확인
- 목록페이지 만들기
- url 지정(name 적기)
- views 지정(index.html이라고 .html도 return에 붙인다.)
- html은 articles/templates/articles/index.html 로 파일을 만들어서 한다.
- 이때 반복문을 활용하기 위해서는 views.py에서 context로 DB를 넘겨오자
- DB 불러와서 목록페이지 만들기
- views.py의 index.html 추가하기(models에서 Article 가져와야한다.)
- Article.object.all()로 다 가져와서 articles에 넣고 context로 넘긴다.
- index.html 가서 반복문 작성 하자.
- AttributeError at /articles/
- views.py에서 articles = Article.object.all()를 articles = Article.objects.all()로 수정
- 서버 동작 확인 후 admin으로 게시물 2개 만들어서 다시 확인.
- admin.py 수정 후 게시물 2개
- python manage.py createsuperuser 로 관리자 만들자
- 0413/0413 로그인
- admin 꾸미기
- ModelAdmin의 list_display 이용
- class 설정은 이름을 ArticleAdmin 으로 하고 admin.ModelAdimin이라고 상속을 받아야 가능하다.
- 게시물의 오름차순, 내림차순 정리
- views의 원래 all()을 order_by('-pk')로 바꾼 것이다.
- articles = Article.objects.order_by('-pk') 은 내림차순
- articles = Article.objects.order_by('pk') 은 오름차순
- create 만들기 위해서 new를 만든다.
- urls부터 하자.
- index.html 에서 new로 가는 길 만들자.
- views에서 주소만든다.
- new.html에서 form추가한다.
- 장고에서 form 관리하기
- forms.py를 만들고 views로 넘겨준다.
- META를 이용한 중복 제거
- form을 ModelForm으로 바꾸는 작업
- POST로 create만들자
- path('create/', views.create, name='create') 안 적는다
- 바로 views에 new로 간다.
-
Create | new를 create로 바꿈
-
Read | 상세보기 페이지 만들기(detail)
- 상세보기에서는 어떠한 글의 보거나 수정하거나 삭제하기 때문에 variable routing은 필수다.
Article.objects.get(pk=pk)
에서 get은 '없어도' 에러를 띄우고 '많아도' 에러를 띄운다.즉 500error를 띄운다. 그런데 값이 없는 것은 내가 잘못한 것이 아니라 글이없는것이기 때문에 클라이언트에게 '글이 없어서 이런 url은 존재하지 않아'라고 이야기를 해주고 싶어서 404 를 보여주려고 하는거다.
article = get_object_or_404(Article, pk=pk)
로 바꿔준다.<a href="{% url 'articles:detail' article.pk %}">글 보기</a>
을 index.html에 추가하기
- Delete | @require_POST 적용
- detail에서 요청보낼 url부터 만든다.
- DB를 바꾸니까 POST해야하고, HTML에서 POST를 할 수 있는 요청은 form밖에 없다.
- 따라서 detail에서
<a href="{% url 'article:delete' article.pk %}">삭제</a>
를 쓸 수 없고 from django.views.decorators.http import require_POST
와@require_POST
두줄로 get 들어오는걸 막을 수 있다.
- Update |
article = get_object_or_404(Article, pk=pk)
수정 시에는 해당 article 인스턴스를 넘겨줘야한다.{% if request.resolver_match.url_name == 'create' %}
분기의 기준은 path가 아니라 url로 한다.- 분기를 하는 이유는 create랑 update랑 둘다 form.html을 받기 때문이다.
1. 기본 초기 순서.
프로젝트 생성) django-admin startproject django_crud
cd django_crue
settings.py => ko-kr Asia/Seoul
터미널창에서) vi .gitignore 치고 추가후에 나가는 방법은 :wq
내부적 table 생성 하기위해 migrate하고 showmigrations로 적용 확인
app 생성) python manage.py startapp articles => app등록 'articles/',
모델 생성) class Article(models.Model)
makemigrations하고 migrate
urls.py 분리 => include('articles.urls')
그리고 목록페이지 만든 후에 잘뜨나 확인하기 위해서 admin추가
2. 사용자인증관리(회원가입, 로그인) 들어가기전의 CRUD까지 만드는 순서
프로젝트 생성
git initpy
gitignore.io -> 터미널창) vi .gitignore -> 붙여넣기 -> esc누른 후에 :wq
settings.py 설정 후 로켓 보기
git status로 db.sqlite3 없는거 확인
git add . 하고 git commit 하자
startapp 으로 앱 생성 후에 app 등록 하자 (앱은 복수형이고 모델은 단수형이다.)
ex) 모델은 Post나 Board로하고 앱은 Posts나 boards로 한다.
git commit 하자
models.py로 class Article(models.Model)만들자.
makemigrations
showmigrations로 확인한다.
migrate
admin 설정. (model 설정 하면서 admin을 추가하는 습관을 들이자. 왜냐하면 관리하기 편하다)
pyrhon manage.py createsuperuser
관리할 관리자 아이디를 생성한다. 연습용으로 만들 떄는 보통 id를 admin으로 만들고 비번을 123으로 만든 후 나머지는 안적고 pass 하면 된다.
forms.py(직접 생성해서 만들어 줘야한다.)
from django import forms
from .models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = '\_\_all\_\_'
url 분리 -> include('articles.urls')
app 안에서 urls.py 생성
from django.urls import path
urlpatterns = [
]
목록페이지(게시판) 생성
#urls.py 설정
이때 app_name='articles' 추가(url에 name 붙여준다.)
#views.py 설정
article = Article.objects.all()을
article = Article.objects.order_by('-pk')이나
article = Article.objects.order_by('-created_at')으로 변경해서 UI를 신경써 준다.
#index.html 설정(아래의 base.html 하고 index.html로 하자.)
위치는 templates/articles/index.html으로 app이름을 넣어서 중복 방지
base.html 생성
위의 index.html 하기 전에 base.html 추가한다.
이때 코드시 추가하면 좋은것을은 아래코드를 참고하자
<title> HANPY - {% block title %}{% endblock %}</title>
{% block css %}
{% endcss %}
{% block body %}
{% endbody %}
<a href="{% url 'articles:index' %}">목록</a>
위의 내용을 base에 넣어주면 편하다.
page not found 안뜨기 만들기
서버를 처음 키면 page not found가 뜬다. 처음 서버를 키면 게시판목록으로 가게만들자.
project의 url로가서 추가하자. 그리고 이 때 app안에 있는 views도 import 해줘야한다. 아래의 내용을 url에 추가하자
from article import views
path('', views.index),
CREATE 생성
#views.py
POST로 오면 사용자가 보낸 값 받고 검중 후에 저장 return redirect('articles:index') or return redirect('articles:detail', article.pk)
GET으로 들어오면 Form 을 보내주자 return render(request, 'articles/form.html', context)
+alert기능 구현(message framework)
READ 생성(detail.html)
article=Article.objects.get(pk=pk) => article=get_object_or_404(Article, pk=pk)
CRUD 나머지 완성해주면 된다.
+ views.py에서 import를 적는 순서
- pyrhon 내장된 것 ex) random
- django 내부에서 불러오는 것 ex) from django.~~
- 내가 만든 파일 ex) model 이나 url
3. 사용자인증관리부분인 accounts 앱을 까지 구현하고 팔로우기능과 좋아요기능을 구현 가능 할 시 시작하는 순서
> django-admin startproject 프로젝트이름
> cd 프로젝트이름
settings 하고 로켓 보고 base.html까지 만들어두자
> python manage.py startapp accounts
custom User 구현
accounts/models.py
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
이렇게 등록해두는 이유는 나중에 변경되면 기존 것들이 바뀌게 되기 떄문에 pass로 아무내용도 없지만 꺼내놓고 시작하자.(내부 USER가 아니라 커스텀 User로 만들어 놓는 거다. 자세한 내용은 follow구현 부분을 참고하자)
settings.py 하단
AUTH_USER_MODEL = 'accounts.User'
앱만들고 코드짜면된다.
4. 가상환경 만들기
프로젝트를 배포하거나 공유를 하는 경우에 각각의 로컬 PC환경마다 설치된 프로 그램이 다르기 때문에 설정값을 다시 맞추기가 어렵다. 그렇기 때문에 컴퓨터 내부와 분리된 독립적인 공간으로 프로젝트를 만들어서 처음부터 프로젝트를 진행하고, 업로드 시에는 설치된 파일을 제외한 최소한의 것들만 올릴 수 있게 만들어보자. 그리고 프로젝트를 다운 시 필요한 파일들을 설치 할 수 있게 관련 파일들을 따로 적어 놓을 것이다.
우선 프로젝트를 넣을 폴더를 하나 만든다.
>python -m venv venv
첫번째 venv는 가상환경을 실행 한다는 명령어이고, 두번째 venv는 생성될 폴더의 이름이다. 이렇게 명령어를 치면 venv라는 폴더가 생기면, pure한 python을 가져올 수 있다. pip list를 치면 아무것도 없다.
>source venv/bin/activate (클라우드 환경) or source venv/Scripts/activate (로컬환경)
위의 코드를 고를 때 핵심은 루트를 찾아가서 activate라서 파일이 있는가 보고 있는 루트로 경로 설정을 해주자. 코드를 치면 pointing이 원래 python이 아니라 pure한 python을 가리킨다.(=가상환경 활성화)
> pip install django==2.1.15
장고 뿐만아니라 필요한 것들을 pip를 해준다.
>pip freeze
>pip freeze > requirements.txt
pip로 설치할 때마다 위의 코드를 처서 pip한 목록을 최신화 시키자. freeze 대신 list를 넣어도 되는데, 그렇게 넣으면 설치 파일의 버전은 안뜨고 이름만 들어가기 때문에 freeze를 쓰자.
git init를 하는 순간, touch .gitignore을 생성하고 venv/ 를 넣는다.
venv는 용량이 매우크기 떄문에 git으로 관리하는게 아니다. 빼고 보낸 후에 사용시 다시 다운 로드하면 된다.
여기 까지 하면, 가상공간 완료. 위에서 하라는 것들 처럼 하면된다.
'Web > Django' 카테고리의 다른 글
[Django]사용자인증관리_login, 쿠키와 세션, 캐쉬 (31) | 2020.08.13 |
---|---|
[Django] views.py 완성코드 (CRUD, 댓글, like) (0) | 2020.08.05 |
[Django] render와 redirect 의 차이점 (0) | 2020.08.01 |
[django] 비동기요청(AJAX) (31) | 2020.07.26 |
[Django] 분기 (31) | 2020.07.24 |
- Total
- Today
- Yesterday
- DFS
- nodejs
- pandas
- login
- Express
- Queue
- logout
- useState
- TensorFlow
- JavaScript
- NextJS
- 자연어처리
- react autoFocus
- read_csv
- error:0308010C:digital envelope routines::unsupported
- react
- UserCreationForm
- mongoDB
- BFS
- next.config.js
- Python
- vuejs
- 클라우데라
- Deque
- typescript
- django
- Vue
- useHistory 안됨
- nextjs autoFocus
- 자료구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |