[Django 문서 번역] 제1장: 빠른 입문--제1절: 개요
27245 단어 Django 문서 번역
Django는 처음에 빠른 개발 수요를 가진 뉴스 사이트에 사용되도록 설계되었는데 그 목적은 간단하고 빠른 사이트 개발을 실현하는 것이다.다음 내용은 Django를 사용하여 데이터베이스 구동의 웹 응용을 실현하는 방법을 간략하게 소개한다.
이 문서는 Django의 작업 원리를 충분히 이해하기 위해 관련 기술 세부 사항을 상세하게 설명하지만, 이것은 입문 강좌나 참고 문서가 아닙니다. (저희도 당연히 이런 것들을 준비했습니다.)프로젝트를 바로 시작하려면 실례 강좌부터 시작하거나 상세한 것을 직접 읽을 수 있습니다
디자인 모델 Django는 데이터베이스 없이 사용할 수 있습니다. 이것은 대상 관계 맵을 제공합니다. 이 기술을 통해 당신은 Python 코드를 사용하여 데이터베이스 구조를 설명할 수 있습니다.
당신은 강력한 데이터 - 모델 문구를 사용하여 당신의 데이터 모델을 묘사할 수 있습니다. 이것은 수년 동안 데이터베이스 모델에서의 난제를 해결했습니다.다음은 간단명료한 예이다.
from django.db import models
class Reporter(models.Model):
full_name = models.CharField(max_length=70)
def __str__(self):
return self.full_name
class Article(models.Model):
pub_date = models.DateField()
headline = models.CharField(max_length=200)
content = models.TextField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
def __str__(self):
return self.headline
데이터 모델을 적용한 다음 Django 명령줄 도구를 실행하여 데이터베이스 테이블을 만듭니다.
$ python manage.py migrate
# migrate , schema 。
간편한 API를 이용하면 편리하고 풍부한 Python API를 사용하여 데이터에 접근할 수 있습니다.이러한 API는 명시적인 생성 코드 없이 즉각적으로 생성됩니다.
# Import the models we created from our "news" app
>>> from news.models import Article, Reporter
# No reporters are in the system yet.
>>> Reporter.objects.all()
<QuerySet []>
# Create a new Reporter.
>>> r = Reporter(full_name='John Smith')
# Save the object into the database. You have to call save() explicitly.
>>> r.save()
# Now it has an ID.
>>> r.id
1
# Now the new reporter is in the database.
>>> Reporter.objects.all()
<QuerySet [<Reporter: John Smith>]>
# Fields are represented as attributes on the Python object.
>>> r.full_name
'John Smith'
# Django provides a rich database lookup API.
>>> Reporter.objects.get(id=1)
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__startswith='John')
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__contains='mith')
<Reporter: John Smith>
>>> Reporter.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Reporter matching query does not exist.
# Create an article.
>>> from datetime import date
>>> a = Article(pub_date=date.today(), headline='Django is cool',
... content='Yeah.', reporter=r)
>>> a.save()
# Now the article is in the database.
>>> Article.objects.all()
<QuerySet [<Article: Django is cool>]>
# Article objects get API access to related Reporter objects.
>>> r = a.reporter
>>> r.full_name
'John Smith'
# And vice versa: Reporter objects get API access to Article objects.
>>> r.article_set.all()
<QuerySet [<Article: Django is cool>]>
# The API follows relationships as far as you need, performing efficient
# JOINs for you behind the scenes.
# This finds all articles by a reporter whose name starts with "John".
>>> Article.objects.filter(reporter__full_name__startswith='John')
<QuerySet [<Article: Django is cool>]>
# Change an object by altering its attributes and calling save().
>>> r.full_name = 'Billy Goat'
>>> r.save()
# Delete an object with delete().
>>> r.delete()
동적 관리 인터페이스: 겉만 번지르르한 것이 아닙니다. 모델이 정의를 완성하면 Django는 전문적인 생산급 관리 인터페이스를 자동으로 생성합니다. 사용자가 대상을 추가, 변경, 삭제할 수 있도록 인증하는 웹 사이트입니다.당신은 간단하게 관리자 사이트에서 당신의 모델을 등록하면 됩니다.
from django.db import models
class Article(models.Model):
pub_date = models.DateField()
headline = models.CharField(max_length=200)
content = models.TextField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
from django.contrib import admin
from . import models
admin.site.register(models.Article)
이러한 디자인이 따르는 이념은 사이트 편집자는 당신의 직원, 당신의 고객, 또는 당신 자신일 수 있다는 것이다. 그러나 당신은 콘텐츠 관리 기능만 있는 백엔드 관리 인터페이스를 만드는 데 반나절을 낭비하지 않을 것이다.
Django 애플리케이션을 만드는 일반적인 프로세스는 다음과 같습니다.
, , ( ) 。 。
URLs의 간결하고 우아한 URL 계획을 기획하는 것은 고품질의 웹 응용 프로그램에 있어서 매우 중요하다.Django는 아름다운 URL 디자인을 숭배하기 때문에 예를 들면.php 및.ASp와 같은 중복된 접미사를 URL에 넣습니다.자신의 URLconf를 설계하기 위해서는 URLconf라는 Python 모듈을 만들어야 합니다.이것은 사이트의 디렉터리입니다. URL과 Python 리셋 함수 사이의 맵을 포함합니다.URLconf도 Python 코드를 URL과 결합하는 데 유리하다.
다음 URLconf는 이전 Reporter/Article의 예에 적용됩니다.
from django.urls import path
from . import views
urlpatterns = [
path('articles//' , views.year_archive),
path('articles///' , views.month_archive),
path('articles////' , views.article_detail),
]
위 코드는 URL 경로를 Python 콜백 함수(뷰)에 매핑합니다.경로 문자열은 매개변수 태그를 사용하여 URL에서 해당 값을 "캡처"합니다.사용자가 페이지를 요청할 때
Django , URL。( ,Django 404 。)
이 과정은 매우 빠르다. 경로가 불러올 때 정규 표현식으로 컴파일되기 때문이다.URL 경로가 일치하는 경우 Django에서 적절한 보기 함수를 호출합니다.모든 보기 함수는 요청 대상인 요청원 정보와 일치하는 매개 변수 값을 포함합니다.
예:
URL "/articles/2005/05/39323/",Django news.views.article_detail(request, year=2005, month=5, pk=39323)。
뷰 작성 보기 함수의 실행 결과는 다음과 같은 두 가지일 수 있습니다. HttpResponse , Http404 。 。
일반적으로 하나의 보기의 작업은 매개 변수에서 데이터를 얻고 템플릿을 불러온 다음에 얻은 데이터에 따라 템플릿을 렌더링하는 것이다.다음은 예어archive의 보기 예:
from django.shortcuts import render
from .models import Article
def year_archive(request, year):
a_list = Article.objects.filter(pub_date__year=year)
context = {'year': year, 'article_list': a_list}
return render(request, 'news/year_archive.html', context)
이 예는 Django 템플릿 시스템을 사용했는데 강력한 기능을 가지고 있으며 사용하기가 매우 간단하여 프로그래머가 아니어도 쉽게 사용할 수 있다.
디자인 템플릿\위의 코드가 news/year 로드됨archive.html 템플릿.
Django에서는 검색 템플릿 경로를 설정하여 템플릿 사이의 중복성을 최소화할 수 있습니다.Django 설정에서 템플릿을 읽어들이는 데 사용할 경로 목록을 DIRS 매개 변수로 지정할 수 있습니다.첫 번째 경로에 템플릿이 없으면 두 번째 확인을 계속합니다.
news/year 를 가정해 봅시다.archive.html 템플릿을 찾았습니다.이것은 보기에 다음과 같습니다: mysite/news/templates/news/yeararchive.html¶:
{% extends "base.html" %}
{% block title %}Articles for {{ year }}{% endblock %}
{% block content %}
<h1>Articles for {{ year }}</h1>
{% for article in article_list %}
<p>{{ article.headline }}</p>
<p>By {{ article.reporter.full_name }}</p>
<p>Published {{ article.pub_date|date:"F j, Y" }}</p>
{% endfor %}
{% endblock %}
우리는 변수가 모두 큰 괄호에 묶여 있는 것을 보았다.
{{ article.headline }} “ article headline ”。 “ ” , 、 。
우리는 알아차렸다
{{ article.pub_date|date:"F j, Y" }} Unix “ ”(“|” )。 , 。 Python datetime ( PHP )。
너는 여러 개의 필터를 한데 연결해서 사용할 수 있다.사용자 정의 템플릿 필터도 사용할 수 있습니다.사용자 정의 템플릿 탭을 직접 작성할 수도 있습니다. 관련 Python 코드는 탭을 사용할 때 백엔드에서 실행됩니다.Django는'템플릿 계승'이라는 개념을 사용했다. 이것이 바로
{% extends "base.html" %}
의 역할이다.'베이스라는 템플릿을 먼저 불러오고 다음 블록으로 템플릿에 정의된 블록을 채워라'는 뜻이다.요컨대, : 。
다음은 베이스입니다.html은 가능한 형태로 정적 파일을 사용합니다.mysite/templates/base.html¶:
{% load static %}
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<img src="{% static "images/sitelogo.png" %}" alt="Logo">
{% block content %}{% endblock %}
</body>
</html>
간단히 말하면, 이 사이트의 외관 (사이트의 로고를 이용하여) 을 정의하고, 하위 템플릿들에게 채울 수 있는 구덩이를 파준다. 또한 사이트의 개판을 더욱 간단하게 한다. 이 템플릿 파일만 바꾸면 된다.
이것은 또한 서로 다른 기초 템플릿을 이용하여 하위 템플릿을 다시 사용해서 웹 사이트의 여러 버전을 만들 수 있다.Django의 창립자는 이미 이 기술을 이용하여 뚜렷하게 다른 휴대전화 버전의 사이트를 창조했다. 단지 새로운 기초 템플릿을 만들기만 하면 된다.
Django의 템플릿 시스템을 꼭 사용해야 하는 것은 아닙니다. 다른 당신이 좋아하는 템플릿 시스템을 사용할 수 있습니다.비록 Django의 템플릿 시스템은 그 모델 층과 잘 통합될 수 있지만, 이것은 당신이 그것을 사용해야 한다는 것을 의미하지는 않는다.마찬가지로 Django의 데이터베이스 API를 사용하지 않아도 됩니다.XML 파일을 직접 읽거나 디스크 파일을 직접 읽을 수 있는 다른 데이터베이스 추상층을 사용할 수 있다.Django의 모든 구성인 모델, 보기, 템플릿은 독립적이다.