구름IDE로 장고 프로젝트 시작하기

김재만·2022년 5월 28일
0
post-custom-banner

회사에서 장고 백엔드와 프로젝트를 구성하다보니, 예전에 풀스택으로 장고 개발을 했던 경험이, 코드 이해에 많은 도움이 되고 있다. 대략적으로 프로젝트를 완성하던 과정을 메모해두었던 내용을 오랫만에 다시 보았다.

  • 구름IDE 컨테이너 생성

  • pip 업그레이드 : pip3 install --upgrade pip

  • mysite 폴더 생성 : mkdir mysite

    • mysite 안으로 들어가기 : cd mysite
  • 가상환경 생성 : python -m venv myvenv

    • 가상환경 안으로 들어가기 : source myvenv/bin/activate
    • 가상환경 핍 업그레이드 : pip install --upgrade pip
  • 장고 설치 : pip install django==3.2

    • 프로젝트 생성 : django-admin startproject PROJECTNAME .
    • DB에 반영 : python manage.py migrate
  • 사용자(접속자) 세팅 : PJname > settings.py > ALLOWED_HOSTS = [값입력, 모두에게 허용시 '*']

    • 시간, 언어설정 : LANGUAGE_CODE = 'ko-kr', TIME_ZONE = 'Asia/Seoul'
  • 메인앱 만들기 : python manage.py startapp main

    • 앱 등록하기 : settings.py > INSTALLED_APPS = ['main',]
  • url 연결하기 : urls.py > from main.views import index

    • urlpatterns = [ path('', index), ]
  • views에 index함수 정의하기 : def index(request):

    • return render(request, 'main/index.html')
  • templates 폴더 생성하기 +그 안에 main폴더 생성

    • index.html 파일 생성하기

mysite에 static폴더 생성

  • static 폴더 연결하기 : settings.py > STATICFILES_DIRS = [
    BASE_DIR / 'static',]
    • static폴더로 이미지 가져오기
    • html에서 static파일 호출하기 : {% load static %}
    • html로 이미지 불러오기 :

cafelist 추가하기

  1. url 추가하기 :
from main.views import index, cafelist
path('cafelist/', cafelist),
  1. views에 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()
  1. makemigrations, migrate
  2. admin.py에 Cafe등록
from .models import Cafe
admin.site.register(Cafe)
  • 슈퍼유저 생성 : python manage.py createsuperuser
    [inC : bachbach1!]

+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 %}
  1. URL 생성
  2. 페이지 구성과 아이디어 정리
  3. 모델

cafedetails페이지 추가하기

  1. url 추가
from main.views import index, cafelist, cafedetails
    path('cafelist/<int:pk>', cafedetails)
  1. views에 cafedetails함수 정의하기
def cafedetails(request, pk):
    cafeobj = Cafe.objects.get(pk=pk)
    return render(request, 'main/cafedetails.html', {'cafeobj': cafeobj})
  1. cafelist onclick 설정하기
  1. cafedetails.html 만들기
hello cafelist
<h1>{{ cafeobj.name }}</h1>
<p>{{ cafeobj.content }}</p>
  1. models에 이미지 필드 추
    mainphoto = models.ImageField(blank=True, null=True)
  1. pillow 라이브러리 추가
    pip3 install pillow
    makemigrations, migrate
  2. 미디어설정(사진 저장공간 설정)
    media폴더 생성 >>
    setting.py >
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = '/media/'
  1. 이미지 URL 설정 코드작성
from django.conf.urls.static import static
from django.conf import settings

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  1. 카페디테일 내 이미지 소스코드 작성
{% if cafeobj.mainphoto %}
    <img src="{{ cafeobj.mainphoto.url }}" alt="">
{% endif %}

댓글기능(디스커스 서비스 활용, disqus )

1.디스커스 사이트 접속
2. 로그인 + 겟 스타트
3. I want to install Disqus on my site 클릭
4. 웹사이트 명, 카테고리 선택하고Create site클릭
5. 자바스크립트 코드 복사해서 원하는 웹의 html파일에 붙여넣기

태그기능 추가

  1. models.py 작성
from taggit.managers import TaggableManager
tag = TaggableManager(blank=True)
  1. taggit 설치
    pip3 install taggit
    3.settings에 taggit 앱 등록
    4.migrations, migrate
    5.cafedetails.html 에 추가
<p>{{ cafeobj.tag.names }}</p>

게시글 작성일 및 수정일 추가하기

  1. models.py에 코드 작성
    published_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)
  1. makemigrations & migrate
    3.날짜 출력 코드 입력
<p>{{ cafeobj.publishedDate }}</p>

템플릿 상속

  1. base.html만들기
<header></header>
    {% block NAME %}
    {% endblock NAME %}
 <footer> </footer>
  1. 상속코드 입력
{% extends "main/base.html" %}
{% block NAME %}
. . .
{% endblock NAME %}

cafe등록페이지 만들기

1.urls.py에 path등록

from main.views import write
path('write/', write, name='write'),
  1. views에 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 만들기

  • 서버실행 : python manage.py runserver 0:80
  • 서버실행종료 : ctrl + C

마무리

개발자 취업에 도전하던 그때 그 시절, 무식하게 달달 외웠던 기억이 새록새록

profile
듣는 것을 좋아하는 개발자입니다
post-custom-banner

0개의 댓글