회사에서 장고 백엔드와 프로젝트를 구성하다보니, 예전에 풀스택으로 장고 개발을 했던 경험이, 코드 이해에 많은 도움이 되고 있다. 대략적으로 프로젝트를 완성하던 과정을 메모해두었던 내용을 오랫만에 다시 보았다.
구름IDE 컨테이너 생성
pip 업그레이드 : pip3 install --upgrade pip
mysite 폴더 생성 : mkdir mysite
가상환경 생성 : python -m venv myvenv
장고 설치 : pip install django==3.2
사용자(접속자) 세팅 : PJname > settings.py > ALLOWED_HOSTS = [값입력, 모두에게 허용시 '*']
메인앱 만들기 : python manage.py startapp main
url 연결하기 : urls.py > from main.views import index
views에 index함수 정의하기 : def index(request):
templates 폴더 생성하기 +그 안에 main폴더 생성
from main.views import index, cafelist
path('cafelist/', cafelist),
def cafelist(request):
return render(request, 'main/cafelist.html'
3.cafelist.html 생성하기
4. Cafe 클래스 생성 : models.py >
class Cafe(models.Model):
name = models.CharField(max_length=50)
content = models.TextField()
from .models import Cafe
admin.site.register(Cafe)
+admin 페이지 게시물 제목 변경
models > Cafe 클래스에 코드입력
def __str__(self):
return self.name
view.py에 게시물 반영 코드 작성하기
from .models import Cafe
cafelistobj = Cafe.objects.all()
return render(request, 'main/cafelist.html', {'cafelistobj': cafelistobj})
cafelist.html 구조 작성하기
{% for i in cafelistobj %}
<h1>{{ i.name }}</h1>
<p>{{ i.content }}</p>
{% endfor %}
from main.views import index, cafelist, cafedetails
path('cafelist/<int:pk>', cafedetails)
def cafedetails(request, pk):
cafeobj = Cafe.objects.get(pk=pk)
return render(request, 'main/cafedetails.html', {'cafeobj': cafeobj})
hello cafelist
<h1>{{ cafeobj.name }}</h1>
<p>{{ cafeobj.content }}</p>
mainphoto = models.ImageField(blank=True, null=True)
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = '/media/'
from django.conf.urls.static import static
from django.conf import settings
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
{% if cafeobj.mainphoto %}
<img src="{{ cafeobj.mainphoto.url }}" alt="">
{% endif %}
1.디스커스 사이트 접속
2. 로그인 + 겟 스타트
3. I want to install Disqus on my site 클릭
4. 웹사이트 명, 카테고리 선택하고Create site클릭
5. 자바스크립트 코드 복사해서 원하는 웹의 html파일에 붙여넣기
from taggit.managers import TaggableManager
tag = TaggableManager(blank=True)
<p>{{ cafeobj.tag.names }}</p>
published_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)
<p>{{ cafeobj.publishedDate }}</p>
<header></header>
{% block NAME %}
{% endblock NAME %}
<footer> </footer>
{% extends "main/base.html" %}
{% block NAME %}
. . .
{% endblock NAME %}
1.urls.py에 path등록
from main.views import write
path('write/', write, name='write'),
from django.shortcuts import render, redirect
def write(request):
if request.method == 'POST':
data = {
'name' : request.POST.get('name'),
'location' : request.POST.get('location'),
'phone' : request.POST.get('phone'),
'content' : request.POST.get('content'),
'mainphoto' : request.POST.get('mainphoto'),
'subphoto' : request.POST.get('subphoto'),
}
cafe = Cafe.objects.create(**data)
return redirect(f'/cafelist/{cafe.pk}')
context = {
'locations' : Cafe.locations,
}
return render(request, 'main/write.html', context)
3.write.html 만들기
개발자 취업에 도전하던 그때 그 시절, 무식하게 달달 외웠던 기억이 새록새록