본문 바로가기
django

리눅스 환경에서 장고 설치 및 실행

by Antonio Bae 2023. 8. 21.

안녕하세요

리눅스 환경에서 장고 설치 및 실행 방법을 알려드리겠습니다.

우선 터미널에서 파이썬이 설치되어 있어야 합니다.

sudo apt install python3

 

 

장고 프레임 워크 설치

python3 -m pip install django

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

python3 get-pip.py

-m pip install django ====> 폴더명: 장고 설치폴더 지정


1.프로젝트 파일 생성

django-admin startproject myproject

이때 팁은 폴더를 만드시고 리눅스 환경에서 cd django로 들어간 이후에 다음 명령문으로 어드민을 설정해야 합니다.

====> myproject라는 폴더 생성 후 장고 어드민 설정

(이것때문에 5번만에 제대로 구현하였어요;)

python3 -m pip install django ======> 프레임워크 설치

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

python3 get-pip.py

-m pip install django		====> 폴더명: 장고 설치폴더 지정

django-admin startproject	====> 장고 어드민 설정

django-admin startproject myproject	====> 폴더명: 장고 설치폴더 지정후 myproject라는 이름의 폴더명 설정 여러가지 파일들이 만들어짐 setting init 등등

python3 manage.py
python3 manage.py runserver		====> 장고 실행하면 포트 설정하라고 나옴
python3 manage.py runserver 8888	====> 포트 번호 변경하고 싶으면 이런식으로 숫자 설정

 

 

django-admin startproject myproject ====>

폴더명: 장고 설치폴더 지정후 myproject라는 이름의 폴더명 설정 여러가지 파일들이 만들어짐 setting init 등등

또한 nanage.py라는 파일이 생성됩니다.

python3 manage.py

 

 서버 실행

python3 manage.py runserver ====> 장고 실행하면 포트 설정하라고 나옴

python3 manage.py runserver 8888 ====> 포트 번호 변경하고 싶으면 이런식으로 숫자 설정

포트 회피하는 방법: 유저별로 포트를 할당

생활코딩에서 아주 자세히 알려주십니다.

저는 10번 봤습니다.

이해가 안가시면 10번 보시길 바랍니다.

https://www.youtube.com/watch?v=QX8CQMycDa0&list=PLuHgQVnccGMDLp4GH-rgQhVKqqZawlNwG&index=4

 

 

배송처리, 회원정보 등 여러가지 섹션을 만듬

이 전체를 MVT 모델 MVC모델이라고 부름

장고 웹프레임워크: 목적에 따라 가져다 쓸 수 있도록 만들어놓은 틀

파이썬 프로그래밍 자체가 다른 프로그래밍에 비해 배우기 쉽고 쓰기 편하게 되어 있기 때문에 개발기간을 상당히 단축시킬 수 있습니다.

특징

제어가 넘어가고 사고가 주입됨

MVC 패턴 기반 MTV (기본적으로 Model-View-Controller 를 기반으로 한 프레임워크)

ORM(Object-relational mapping) 기능 지원

쉬운 DB관리를 위해 프로젝트를 생성하면서 관리자기능을 제공

쉬운 URL 파싱 기능 지원

동일한 소스코드에서 다른 나라에서 용이하도록 번역, 날짜/시간/숫자 등의 포맷 타임존 지정 등의 기능을 제공

라우팅이란? 누가 보내진 정보를 처리할것인가 경로를 설정하는것

리눅스 환경에서 장고 설치방법

우선 파이썬이 설치되어 있어야 합니다. sudo apt install python3

python3 -m pip install django ======> 프레임워크 설치

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

python3 get-pip.py

-m pip install django ====> 폴더명: 장고 설치폴더 지정

django-admin startproject ====> 장고 어드민 설정

django-admin startproject myproject ====> 폴더명: 장고 설치폴더 지정후 myproject라는 이름의 폴더명 설정 여러가지 파일들이 만들어짐 setting init 등등

python3 manage.py

#실행 관련 내용 해당 페이지 참조

#https://docs.djangoproject.com/en/4.2/ref/django-admin/

python3 manage.py runserver ====> 장고 실행하면 포트 설정하라고 나옴

python3 manage.py runserver 8888 ====> 포트 번호 변경하고 싶으면 이런식으로 숫자 설정

포트 회피하는 방법: 유저별로 포트를 할당

https://www.youtube.com/watch?v=QX8CQMycDa0&list=PLuHgQVnccGMDLp4GH-rgQhVKqqZawlNwG&index=4

배송처리, 회원정보 등 여러가지 섹션을 만듬

django-admin startapp dama 담아라는 폴더명 생성하여 하나의 앱 실행

이 전체를 MVT 모델 MVC모델이라고 부름

<프론트>

url.py/login 앱1- 로그인

url.py/membership 앱2- 회원가입

url.py/find_id 앱3- 아이디 찾기

url.py/location 앱4- 분리배출

url.py/event 앱5- 행사

url.py/information 앱6- 정보습득

url.py/community 앱7- 게시판

<백엔드>

url.py/member

url.py/product

url.py/delivery

라우팅이란?

라우팅 구조

1.함수

2.객체 - 그 객체의 메서드를 부르는 방법 ex) home.as_view()

3.연결 - include 함수를 통해 다른 url로 위임

admin.site.urls- 함수형 표기

9장

콘솔창에서 network-headers를 클릭하면 GET 방식인 것을 확인할 수 있습니다.

10장-생성 기능 구현

?id 리드로 전달됨 =>query string => get방식

변경

create => method=post 방식으로 변경이 가능함

csrf django skip을 통해 disable 즉 csrf를 면제하겠다.

@csrf_exempt

def create(request)라는 객체를 생성하여 httpresponse(htmlTemplate(artivle)) 리턴

placeholder : 도움말을 보여주는 기능

p태그: 단락

textarea: 여러줄의 텍스트 입력할 때 쓰는 태그

form 태그: 폼을 전달

?title=1 : query string 즉, title이 1이라는 정보를 갖고오는 겟방식으로 데이터를 갖고오는 방식

브라우저가 서버에 있는 데이터를 변경하려는 작업

=> post 방식으로 해결이 가능하며(method="post"), csrf오류를 해결할 수 있음

@csrf_exempt

데이터 제출을 했을때 전송이 되며 오류를 막아줌.

def create(request)라는 객체를 생성하여 httpresponse(htmlTemplate(artivle)) 리턴

11장- 생성기능(request response object)

1) get방식

2) elif post방식

post: 사용자의 정보를 받아 변경

title =

body =

url = '/read/'+str(nextId)

nextId = nextId +1

redirect(url)

 

12장-삭제

contextUI 상세보기를 통해서만 보여지게

13장-업데이트

14장-마무리

template engine

-html과 파이썬 코드가 헤깔릴 시 실수 하지 않도록 템플릿 제공드립니다.

 

<project 폴더 url.py>

"""
URL configuration for daegeunproject project.

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/4.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include

#앱에 url을 넘겨주는 역할
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('damsapp.urls'))
]

<app 폴더 url.py>

from django.contrib import admin
from django.urls import path
from damsapp import views

#views.에 위임하는 행위
urlpatterns = [
    path('', views.index),
    path('create/', views.create),
    path('read/<id>/', views.read),
    path('update/<id>/', views.update),
    path('delete/', views.delete)
]

​<app 폴더 views.py 코드>

from django.shortcuts import render, HttpResponse, redirect
import random
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import redirect

nextId = 4
topics = [
    {'id':1, 'title':'routing', 'body':'Routing is ..'},
    {'id':2, 'title':'view', 'body':'View is ..'},
    {'id':3, 'title':'Model', 'body':'Model is ..'}
]
# 받아서 출력
def HTMLTemplate(articleTag, id=None):
    contextUI = ''
    global topics
    print(id)
    if id != None:
        contextUI = f'''
            <li>
                <form action = "/delete/" method="post">
                   <input type="hidden" name="id" value={id}>
                   <input type= "submit" value="delete">
                </form>
            </li>
            <li><a href="/update/{id}">update</a></li>
        '''
        
    ol = ''
    for topic in topics:
        ol += f'<li><a href="/read/{topic["id"]}">{topic["title"]}</a></li>'

    return f'''
    <html>
    <body>
        <h1><a href="/">Django</a></h1>
        <ul>
            {ol}
        </ul>
        {articleTag}
        <ul>
            <li><a href="/create/">create</a></li>
            {contextUI}
        </ul>
    </body>
    </html>
    '''

# Create your views here.
def index(request):
    article = '''
    <h2>Welcome</h2>
    Hello, Django
    '''
    return HttpResponse(HTMLTemplate(article))

def read(request, id):
    print(id)
    global topics
    article = ''
    for topic in topics:
        # print(type(topic['id']), type(id))
        if topic['id'] == int(id):
            article = f'<h2>{topic["title"]}</h2>{topic["body"]}'
    return HttpResponse(HTMLTemplate(article,id))#


@csrf_exempt
def create(request):
    global nextId
    if request.method == 'GET':
        article = '''
            <form action="/create/" method="post">
                <p><input type="text" name="title" placeholder="title"></p>
                <p><textarea name="body" placeholder="body"></textarea></p>
                <p><input type="submit"></p>
            </form> 
        '''
        return HttpResponse(HTMLTemplate(article))
    elif request.method == 'POST':
        title = request.POST['title']
        body = request.POST['body']
        newTopic = {"id":nextId, "title":title, "body":body}
        topics.append(newTopic)
        url = '/read/'+str(nextId)
        nextId = nextId + 1
        return redirect(url)
    
@csrf_exempt
def update(request,id):
    global topics
    if request.method =='GET':
        for topic in topics:
            if topic['id'] ==int(id):
                selectedTopic = {
                    "title":topic['title'],
                    "body":topic['body']
                }
        article = f'''
            <form action="/update/{id}" method="post">
                <p><input type="text" name="title" placeholder="title" value={selectedTopic["title"]}></p>
                <p><textarea name="body" placeholder="body">{selectedTopic['body']}</textarea></p>
                <p><input type="submit"></p>
            </form> 
        '''
        return HttpResponse(HTMLTemplate(article, id))
    elif request.method == 'POST':
        title = request.POST['title']
        body = request.POST['body']
        for topic in topics:
            if topic['id'] == int(id):
                topic['title'] = title
                topic['body']= body

        return redirect(f'/read/{id}')
    
@csrf_exempt
def delete(request):
    global topics
    if request.method =='POST':
        id = request.POST['id']
        newTopics = []
        for topic in topics:
            if topic['id'] != int(id):
                newTopics.append(topic)
        topics = newTopics
        return redirect('/')

​감사합니다.