본문 바로가기
Back end

0721 Pycharm 설정

by 대금부는개발자 2021. 7. 21.
SMALL

 

Pycharm 실행 후 django 확인

setting → project:MyFirstWebPoll → python interpreter → django

django 있나 확인!!

 

 

우리 Project에 대한 설정 하러 가봅시다.

 

settings.py

 

import os     import는  module을 사용할 수 있도록 해주는 기능을 해요.

os라는 module 은 operating system() 관련된 기능 (path 경로 등등)

 

BASE_DIR= 은 설정을 위해서 사용하는 변수예요.

BASE_DIR로 잡히면 프로젝트를 감싸고 있는 폴더(:MyFirstWebPoll)를 지칭해요

 

SECRET_KEY는 기본 세팅이라 건드리지 마세요.

 

DEBUG = True는 개발 모드를 지칭해요. 개발 모드인 경우 DEBUG 값을 True

개발이 끝난 후 서비스 (운영모드) 할 때는 이 값을 False로 주시면 돼요!

 

 ALLOWED_HOSTS = [] 에 개발을 하거나 서비스를 하는 서버 컴퓨터의 IP 주소나 Domain name이 나와요!

인터넷에 연결된 개개의 컴퓨터는 주소를 하나 가지고 있어요→IP Address(4 자리로 구성)

IP Address는 전 세계 총량이 정해져 있어요.

내 컴퓨터에서 보려면 cmd 창에 ipconfig 치면 아이피 주소가 나와요.

192.168로 시작하면 가상 ip예요(실제 나의 컴퓨터를 지칭하지 않아요)

개발환경인 경우 내 컴퓨터에 서버가 시작된다는 ALLOWED_HOSTS = ['localhost', '127.0.0.1']

서비스가 시작되는 서버 쪽 컴퓨터의 domain name을 지칭해요.(이 값은 고정)

실제 서비스를 하려면 IP가 나오거나 domain name이 나와야 해요.

운영 IP가 나와야 해요

 

# Application definition

현재 project 안에 포함되어 있는 기능(Application)등에 대한 정의가 나와야 해요

'django.contrib.auth', 는 사용자에 대한 User Table과 Group Table을 가지고 있어요.

'django.contrib.admin', admin page라는 특수한 상황을 만들 수 있어요.

 

INSTALLED APPS 리스트 제일 밑에 우리가 가지고 있는 userdefine application을 포함시켜줘야 해요.

(애플리케이션 지칭)

'polls.apps.PollsConfig'

 

apps.py

 

apps.py 는 디렉터리 안에는 무조건 있고, 해당 application에 대한 명세를 들고 있어요.

안에 들어가면 클래스가 있고 클래스 이름이 'PollsConfig' application을 지칭해요.

그래서 PollsConfig를  settings.py의 INSTALLED APPS 에 가져와서 복사하고 경로를 입력해 주세요.

'polls.apps.PollsConfig'

패키지 모듈(파일) 클래스명

 

 

 

 

 

settings.py

 

MIDDLEWARE는 내부적으로 Djang 시스템이 돌아가기 위해 여러 가지 설정이 되어 있는 부분이에요.

ROOT_URLCONF는 처음 사용자의 Request url을 분석해서 view에 어떤 함수를 호출할 건지 설정해 놓은 부분이에요.
url CONF는 하나만 있지 않고 각각의 애플리케이션마다 즉, 여러 개 있고, 그중에 최우선으로 실행하는 게 ROOT_URLCONF이에요
결국 url.py 파일이 어떤 함수를 할지 적어요.


TEMPLATES은 화면에 필요한 부분을 포함시켜 결과 화면을 만들어줄 때, TEMPLATES  결과 화면을 만들어주는데
화면에 필요한 부분을 포함시키는 곳 이에요.
 
WSGI_APPLICATION 도 전체 시스템 통신에 대한 설정에 대한 내용이에요

Database는 Web application을 만들면 database를 쓸 때 여러 가지 database를 사용하는 곳이에요.
 django.db.backends.sqlite3는  django가 기본적으로 제공해주는 sqlite3을 쓰겠다는 내용이에요.
NAME은  어떤 file이 만들어질지 명시해요.
os.path.join 는 경로를 만들어줘요. BASE_DIR는 우리 myfirstwebpoll이에요. 

db.sqlite3는 파일의 이름이에요.

 

밑에 TIME_ZONE은 세계표준시'UTC'로 설정되어 있어 우리나라 시간으로 바꿔줘야 해요. 
TIME_ZONE = 'Asia/Seoul'

 


DATABASE file을 만들러 가 봅시다.


manage를 이용해서 working directory를 잡아야 해요
밑에 Terminal →dir →python manage.py migrate →polls안에 db.sqlite3 확인 →chrome에 sqlite3 browser windows 10→DB Browser for SQLite -. zip (no installer) for 64-bit Windows  다운로드하여 바탕화면 압축 풀기 →DB Browser for SQLite 실행  → 데이터베이스 열기 →python-Django 안에 db sqlite3 실행  →다시 Terminal   →python manage.py runserver  → 웹 서버에 http://localhost:8000/ 입력 로켓 확인!! 

위에 migrate 는data 테이블의 명세에 있는 내용을 가져다가 실제 테이블을 만들어 주는 역할!

 

adminpage 사용.

Django 는 기본적으로 adminpage(관리자 페이지를 우리가 사용할 수 있게 해 줘요)를 제공해줘요.

계정 생성

 chrome에 http://localhost:8000/admin 검색→Username:Password: 는
sqplite3 사용자 table을 근간으로 이용해서 사용해요 그래서 사용하기 위해 계정을 생성할 거예요.

Pycharm으로 돌아가 terminl local 옆에 + 눌러서 새로운 dos창(Local(2))  →python manage.py createsuperuser →

본인 아이디 이메일 비밀번호 입력 관리자 계정 생성 완료! → 다시 chrome에서 로그인 



* 제 접속할때는 terminal에 python manage.py runserver 입력
 chrome에 http://localhost:8000/admin 검색, 로그인

Pycharm 

database table을 만들기 위해 Model 먼저 만들 거예요.(class 활용)
Model 작업은 우리가 사용하는 database 에 Table을 생성하는 작업이에요.

models.py

from django.db import models  여기서 models는 Django 가 기본적으로 제공해주는 class예요.

우리 project 에서  polls application은 Question, Choice Table 두 개의 테이블을 사용해요.
model을 만들려면 반드시 정해져있는 class(models.Model)를 상속해야 해요.
class안에는 database 안의 table의 column을 명시해야 해요!=> class variable 이용
id(Integer-PK), question_text(varchar(200), pub_date => column명
table을 만들면 id(PK)가 자동으로 생성돼서 id는 따로 입력하지 않아요. primarykey 따로 만들 때만 사용해요.
이 class의 instance가 table의 하나의 record(row)와 1:1 매핑돼요.
이 class 의 객체가 admon page에서 table의 내용을 볼 수 있는데, 객체 형태로 보이게 돼요. 

 

class Question(models.Model):

question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField()

def __str__(self):
return self.question_text


class Choice(models.Model):

choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
#foreignkey는 컬럼명이 될 때 현재 명시한 class variable의 이름에 + '_id' 붙여서 컬럼명이 돼요.
question = models.ForeignKey(Question, on_delete=models.CASCADE)

def __str__(self):
return self.choice_text



admin.py 에서 class 설정이 해 줘야 admin page table이 보이게 돼요!
from polls.models import Question, Choice 차례차례 찾아서 경로를 입력해요.
Model을 등록시켜줄꺼예요. 그래야 관리자 page에서 해당 Table이 출력돼요!

 

from django.contrib import admin
from polls.models import Question, Choice

# Model을 등록시켜줄꺼예요. 그래야 관리자 page에서 해당 Table이 출력돼요!

admin.site.register(Question)
admin.site.register(Choice)


Local(2) 콘솔에 python manage.py makemigrations을 치면
migration 폴더에 파일이 만들어져요!
그다음 python manage.py migrate
실제 questions와 choices 가 만들어져요 http://localhost:8000/admin/ 에서도 확인!

 

 

MyFirstWebPoll project의 전체 흐름 도식

urls.py 

http://localhost:8000/polls 이렇게 request가 들어오면
URLconf 가 해석해서 View들 뒤져 index()호출←(로직처리+결과화면만들기) 를 호출할 거예요!
내부적으로 로직 처리를 한 후(Template에 index.html을 만듦) client화면을 만들꺼예요.

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

urlpatterns = [
path('admin/', admin.site.urls), #http://localhost:8000/admin
path('polls/', ) #http://localhost:8000/polls
]


 

pycharm

 

 

 

 

 

제일먼저 URL과 view의 맵핑할꺼예요.

path 는 django가 제공해주는 module

mysite → urls.py

 

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

urlpatterns = [
path('admin/', admin.site.urls), #http://localhost:8000/admin
path('polls/', ) #http://localhost:8000/polls
]

 

path('polls/', ) 에 넣기위해 view 에 함수를 이용해 index함수를 하나 만들러 갈꺼예요

 

 

views.py

 

1. request를 객체화 시켜서 index 라는 함수에 넣어 define 할꺼예요.

request를조사하면 client 가 무었을 원하는지 알 수 있어요.

 

def index(request)는 현재 Database안에 있는 Question Table 속에 질문에 대한 목록을 가져오는 거예요.이 목록을 가지고 결과 HTML을 Temlplate을 이용하여 만들어서 client에게 전달.

 

2. Database에 접속해서 Question Table의 질문 목록을 가져와요!(우리는 ORM을 이용하기 때문에 SQL을 사용하지 않을거예요.)

3. module을 import 해서 다른 file 에서 써야하기 때문에 models.py를 이용

from polls.models import Question

4. Question 클래스의 객체들의 모든 객체를 싹 다 가져오라는 의미.

Question.objects.all() 특정조건으로 정렬을 해서 가져올 때 .order_by('특정조건')을 붙여줘요. 날짜 내림차순은 '-pub_date'

5 .context 객체를 만들어서 Template를 이용해 rendering 한 결과를 리턴해요!
context 객체라고 불리는 dictionary를 만들어요!(결과데이터를 HTML에 rendering 하기 위해)

 

from polls.models import Question
#현재 Database안에 있는 Question Table 속에 질문에 대한 목록을 가져오는 거예요
#이 목록을 가지고 결과 HTML Temlplate을 이용하여 만들어서 client에게 전달.

def index(request):
q_list = Question.objects.all().order_by('-pub_date') # DB처리 포함한 로직처리
context = {'question_list': q_list}
return render(request, 'polls/index.html',context)

 

 

6.view.py에서 html 은 front-end의 html 이랑 살짝 달라요.

django에선 html에는 template라고 하는 특이한 코드가 들어가요.

그리고 반드시 dictionary{} key=value 형태로 html에 전달해야 하고 이것이 context라는 객체예요.

render라는 함수는 context 객체와 request를 합쳐 html 을 만들어 return을 통해

client에게 넘겨줘요!

 

 

polls 폴더 만들기

 

local2→ cd polls → dir 여러 파일이 보여요 여기에 template 폴더를 만들 거예요→

mkdir templates  → cd templates → mkdir polls → cd polls

 

templates 폴더 밑에 polls 폴더 생성됐는지 확인.

polls 마우스 오른쪽 html 파일 하나 만들 거예요. index.html

 

<body>

<h1>이것은 소리 없는 아우성</h1>

</body>

 

현재 완성되지 않았지만 template file까지 만든 거예요.

 

urls.py

 

module을 찾아 그 안의 함수를 호출 여기서 view는 polls 밑에 있는 views.py를 지칭

지금 실행하는 거라 index 옆에 ()가 들어오면 안 돼요

모듈을 못 찾으니까 추가로 import 해요

from polls import views

name은 나중에 사용할 일 있어서 논리적인 이름을 붙여주는 것

 

 

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

urlpatterns = [
path('admin/', admin.site.urls), #http://localhost:8000/admin
path('polls/',views.index, name='index') #http://localhost:8000/polls

 

 

http://localhost:8000/polls 을 쳐보면 화면에 이것은 소리 없는 아우성 이 나올 거예요.

 

 

 

 

 

LIST

'Back end' 카테고리의 다른 글

0723 Django project3  (0) 2021.07.23
0722 Django project2  (0) 2021.07.22
0720 Django 프로젝트 만들기  (0) 2021.07.20
0720 Django  (0) 2021.07.20
0720 Django 특징  (0) 2021.07.20

댓글