[Django]개발일지 - 생활코딩

손성수·2023년 5월 18일
0
  • vs code Django 개발환경 구축
    Dajngo 설치
python -m pipinstall django
django-admin startproject myproject .
  • settings.py
    프로젝트 운영에 필요한 여러가지 기능 포함

  • urls.py
    사용자가 접속하는 패스에 따라서 그 요청을 누가 처리할건지 지정(라우팅)

  • manage.py
    프로젝트 진행에 필요한 유틸리티 파일

  • 장고 실행 명령어

python -m manage runserver
  • 서버 종료 단축키
    catl + c

  • 다른 포트 서버로 장고 실행 명령어

python -m manage runserver 8888(포트번호)



포트의 개념
0~65535의 포트가 존재
사용자가 서버 소프트웨어를 실행시킬때, 어떤 포트와 연결할지 지정한다.
서버 프로그램은 80번 포트에 접속(리스닝하고있다)
사용자가 해당 서버에 접속하기 위한 방법
http:127.0.0.1:포트번호
python 개발환경은 기본적으로 8000번 포트번호를 리스닝하게 된다.




기능 구현은 project.urls.py에서 구현하지 않고
각각의 urls.py에서 만든다
app - views.py,urls.py
views.py 는 여러 함수를 만들어 여러가지 기능을 구현한다.

사용자 접속 > project.urls.py에서 적당한 앱의 url을 연결
앱 urls.py에서는 vies.py로 이동하여, 적당한 함수를 실행하게 된다.
model을 통해 데이터베이스를 접속한다.
데이터베이스를 받아와, html,json,xml을 사용자에게 보내준다.

  • app 만들기
django-admin startapp



어떤 웹 프레임 워크를 만들건간에, 제일 먼저 해야될건 라우팅이다.
라우팅 : 경로,사용자가 접속한 각각의 경로를, 누가 처리할것인가 정하는것
project.urls.py > app.urls.py >> app.views.py

project.urls.py
urls.py에는 urlpatterns라는 리스트가 있어야하며
이 리스트 안에는 라우팅에 관련된 url이 있어야 한다.

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'))
    설명에 적힌것과 같이 리스트 안에 추가 내용을 적어준다
    
path('',include('myapp.urls'))
  • app.views.py 수정
    첫번째 함수의 파라미터 인자로 요청과 관련된 여러가지 정보가 들어오기로
    약속되어 있는 객체가 전달되기로 약속되어있다.
    관습적으로 매개변수의 이름은 request로한다.

  • HttpResponse
    헤더파일 필요
    Http를 이용해서 응답을 한다.

return HttpResponse('welcome')
  • myapp urls.py
from django.urls import path
from myapp import views

urlpatterns = [
    path('',views.index),
    path('create/',views.create),
    path('read/<id>/',views.read),
]
  • myapp views.py
from django.shortcuts import render,HttpResponse

# Create your views here.
def index(request):
    return HttpResponse('welcome!')

def create(request):
    return HttpResponse('Create!')

def read(request,id):
    return HttpResponse('Read!'+id)
  • myproject urls.py
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    #관리자 페이지로 이동하기 위한 라우팅
    path('',include('myapp.urls'))
]
  • 동작 원리
  1. 사용자가 http://127.0.0.1:8000/read/3/ 서버를 요청한다.
  2. myproject폴더의 urls.py에서, 적절한 url을 찾아
    myapp의 urls.py를 라우팅한다.
  3. myapp의 urls.py에서 /read/id=3/을 찾아, vies.py의 read함수를 호출한다.
  4. views.py의 read함수는 "Read"+id 를 출력시킨다.




웹서버와 웹 애플리케이션 서버의 차이점

  • 웹 서버
    • 필요로할만한 페이지를 미리 만들어 놔야 한다 (html1,html2,html3)
    • 정적인 방식
    • 장점 : 성능이 굉장히 빠르다
  • 웹 애플리케이션 서버
    • view.py 하나만 만들면 된다. (read/1/ : 접속하는순간 html코드를 만들어낸다)
    • 동적인 방식
    • 단점 : 굉장히 느리다, 그러나 컴퓨터 성능이 좋아져 신경쓸게 없다
    • 단점 : 공부할점이 많다
    • 장점 : 유지보수가 뛰어나다, 개인화된 정보를 그때그때 만들 수 있다.
from django.shortcuts import render,HttpResponse
import random

def index(request):
    return HttpResponse('<h1>random<h1>'+str(random.random()))
  • 다음과 같은 코드로, 동적으로 랜덤한 값이 계속해서 바뀌게 나올 수 있는 장점이 있다.




CRUD

아무리 복잡한 어플리케이션이라도 네가지 작업에 갇혀있다.
Create,Read,Update,Read

  • Read
    read작업은 다음과 같이 나누어져있다
  1. Hompage : 홈페이지
  2. article : 상세보기
from django.shortcuts import render,HttpResponse
import random

student = [
    {'id':1,"name":"son","age":29},
    {'id':2,"name":"an","age":30},
    {'id':3,"name":"jeon","age":23},
]

def HTMLTemplate(articleTag):
    global student
    stirng = ''
    for text in student:
        stirng += f'<li><a href = "/read/{text["id"]}">{text["name"]}</a></li>'

    return f'''
    <html>
<head>
	<title>My Simple Page</title>
</head>
<body>
    <h1><a href = "/">Django</a><h1>
	{articleTag}
	<p>This is just a simple example of an HTML page.</p>
	<ul>
		{stirng}
	</ul>
</body>
</html>
    '''

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

def read(request,id):
    global student
    article = ''
    for text in student:
        if text['id'] == int(id):
            article = f'<h2>{text["name"]} {text["age"]}age</h2>'

    return HttpResponse(HTMLTemplate(article))

def create(request):
    return HttpResponse('Create!')

return HttpResponse(HTMLTemplate(article))
HttpResponse : 클라이언트에 응답을 다시 보내는 메소드
HTMLTemplate : 코드의 재 사용성을 높이기위한 함수
index와 read함수에서 return 값으로 호출하고 있는데,
article변수에 데이터를 담아 매개값으로 보내고 있다.





생성 기능 구현

profile
더 노력하겠습니다

0개의 댓글

관련 채용 정보