1. URL과 뷰
C:\projects\mysite> django-admin startapp pybo
터미널에 입력하여 pybo앱을 생성한다.
장고는 config/urls.py 파일에 URL매핑정보를 추가 해야한다.
장고의 urls.py파일은 페이지 요청이 발생하면 가장 먼저 호출되는 파일로 URL과 뷰 함수간의 매핑을 정의한다.
장고에서 뷰는 views.py를 의미한다.
urls.py 파일을 아래처럼 수정한다.
from django.contrib import admin
from django.urls import path
#-----edit-----#
from pybo import views
#pybo에 있는 views 모듈을 가져옴
urlpatterns = [
path('admin/', admin.site.urls),
#-----edit-----#
path('pybo/', views.index),
#장고에는 URL을 정규화 하는 기능이 있기 때문에 pybo가 아닌 pybo/의 형태로 슬래시를 붙여야 함
]
이렇게 해도 views.index가 만들어지지 않아 오류가 뜬다.
views.py에 다음과 같이 index함수를 추가한다.
from django.shortcuts import render
#-----edit-----
from django.http import HttpResponse
def index(request):
#매개변수 request는 장고 프레임 워크에 의해 자동으로 전달되는 HTTP 요청 객체
return HttpResponse("안녕하세요")
#HttpResponse는 HTTP 요청에 대한 응답을 할 때 사용하는 장고 함수
# Create your views here.
장고의 흐름
1. 웹브라우저에서 로컬서버로 URL요청
2. 장고의 urls.py에서 URL을 해석해 views.py 파일의 index 함수를 호출
3. 함수를 실행한 결과를 웹 브라우저에 전달
config/urls.py를 다음과 같이 수정
"""config URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.0/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
#-----edit-----#
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
#-----edit-----#
path('pybo/', include('pybo.urls')),
#pybo/로 시작되는 URL이 요청되면 pybo/urls.py 파일의 매핑정보를 읽어서 처리함
#URL이 추가되더라도 pybo/urls.py 파일만 수정하면 됨
]
pybo/urls.py를 생성 후 다음과 같이 코드 입력
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
]
2. 모델
from django.db import models
# Create your models here.
class Question(models.Model):
subject = models.CharField(max_length=200)
#제목
content = models.TextField()
#내용
create_date = models.DateTimeField()
#작성일시
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
#qustion 모델을 속성으로 가져옴 외래키를 이용해 다른 모델과 연결함
content = models.TextField()
#내용
create_date = models.DateTimeField()
#작성일시
get은 값의 한건만 리턴함
get은 주로 1건의 데이터 조회시 사용함
filter는 QuerySet으로 나옴
name__contains='찾을 문자'
delete은 데이터를 삭제함
연결모델명_set은 연결된 데이터를 조회함
3. 장고 관리자
슈퍼유저
-장고 관리자를 사용하기 위 해 슈퍼유저를 생성해야함
-python manage.py createsuperuser를 통해 슈퍼유저 생성
-Password입력시 타이핑이 되지 않는 것처럼 보이지만 입력 되고 있음
4. 조회와 템플릿
-템플릿 파일(pybo/question_list.html)은 HTML파일과 비슷하지만 장고에서 사용하는 태그들을 사용할 수 있는 HTML파일
-템플릿에 사용되는 태그
분기문 태그 사용법
{% if 조건문1 %}
<p>조건문1에 해당되는 경우</p>
{% elif 조건문2 %}
<p>조건문2에 해당되는 경우</p>
{% else %}
<p>조건문1, 2에 모두 해당되지 않는 경우</p>
{% endif %}
반복문 태그 사용법
{% for item in list %}
<p>순서: {{ forloop.counter }} </p>
<p>{{ item }}</p>
{% endfor %}
-for문 안에서는 forloop 객체를 사용할 수 있음
-forloop.counter: 루프내의 순서로 1부터 표시
-forloop.counter(): 루프내의 순서로 0부터 표시
-forloop.first: 루프의 첫번째 순서인 경우 True
-forloop.last: 루프의 마지막 순서인 경우 True
객체 출력 태그 사용법
{{ 객체 }}
{{ 객체.속성 }}
5. URL과 네임스페이스
-URL매핑에 name속성을 부여해 주어 링크의 주소대신 별칭으로 사용가능함
-{% url 'detail' question.id %}: 링크를 다음과 같은 형태로 매핑할 수 있음(question.id는 <int:question_id>를 의미함)
-중복을 피하기 위해서 app_name 변수를 지정해야함
-{% url 'pybo:detail' question.id %}의 형태로 네임스페이스를 지정해줄 수 있음
6. 데이터 저장
-{% csrf_token %}: 보안에 관련된 항목, 실제 웹페이지에서 작성된 데이터인지를 판단해줌, form태그 아래에 항상 있어야함
-request.POST.get('content'): POST로 전송된 폼 데이터 항목 중 content의 값을 의미함
-redirect 함수는 페이지 이동을 위해 장고가 제공하는 함수
7. 스태틱
-스타일시트 파일은 장고의 스태틱 디렉터리에 저장해야함
-스태틱 파일을 적용하기 위해 아래와 같은 태그를 html파일에 넣어야 함
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'style.css' %}">
8. 템플릿상속
-{% block content %} 와 {% endblock %}는 base.html을 상속한 템플릿에서 구현해야하는 영역
9. 폼
-장고의 폼은 일반폼과 모델폼으로 나누어짐
-모델폼은 모델과 연결된 폼으로 폼을 저장하면 연결된 모델의 데이터를 저장할 수 있게 됨
-모델폼은 class Meta라는 내부 클래스가 반드시 필요함
-Meta 클래스에는 사용할 모델과 모델의 속성을 적어줘야 함
-{{ form.as_p }}: 제목과 내용같은 폼 입력 항목을 위한 html코드들을 자동으로 만들어냄
-{{ form.subject.value|default_if_none:'' }}: 오류가 발생시 기존 입력 값을 유지해 줌
- |default_if_none:''는 폼데이터에 값이 없을 경우 None대신 공백으로 표시하기 위한 필터
'파이썬(Python)' 카테고리의 다른 글
파이썬 스터디 5단계 생활코딩 강의(다중상속/패키지매니저) (0) | 2020.05.21 |
---|---|
파이썬 스터디 5단계 생활코딩 강의(객체와 변수/상속/클래스 맴버/Override/객체와 모듈) (0) | 2020.05.18 |
파이썬 스터디 백준 알고리즘 문제 8단계(문자열) (0) | 2020.05.17 |
(점프 투 장고 스터디) 1장 장고시작하기 (0) | 2020.05.10 |
파이썬 스터디 백준 알고리즘 문제 7단계(함수) (0) | 2020.04.24 |