Django 시작하기(2)

22295 단어
성명: 본문은 학습https://docs.djangoproject.com/zh-hans/2.2/문서 뒤에 필자가 배운 후에 정리한 간략판은 빠른 입문에 적합하고 위의 것을 인용할 수 있다. 전체 판을 보고 싶으면 위의 사이트 주소로 갈 수 있다= ̄ω ̄=
Django 보기: Django에서 웹 페이지와 다른 내용은 보기에서 파생된다.모든 보기는 간단한 Python 함수로 표현됩니다. (클래스 기반 보기에서라면.)Django는 사용자가 요청한 URL에 따라 어떤 보기를 사용할지 선택합니다. (더 정확히 말하면 URL의 도메인 이름 뒤에 있는 부분입니다.)이전의 토대 위에서 더 많은 보기를 추가합니다. 주로/views를 먼저 적용합니다.py에서 보기 함수를 작성하고 urls에서 경로를 쓰고 루트 디렉터리 URLconf에 등록합니다:polls/views.py에 추가:
def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)

def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResponse(response % question_id)

def vote(request, question_id):
    return HttpResponse("You're voting on question %s." % question_id)

폴스에 있어요.urls 모듈에 라우팅 추가하기
from django.urls import path

from . import views

urlpatterns = [
    # ex: /polls/
    path('', views.index, name='index'),
    # ex: /polls/5/
    path('/', views.detail, name='detail'),
    # ex: /polls/5/results/
    path('/results/', views.results, name='results'),
    # ex: /polls/5/vote/
    path('/vote/', views.vote, name='vote'),
]

서비스 다시 시작 후 URL 입력http://127.0.0.1:8000/polls/1/vote/또는detail,results와 같이 생성된 보기를 볼 수 있습니다
보기의 역할: 요청된 페이지의 내용을 html에 삽입하여 사용자 정의로 되돌려줍니다. 주로 mysites에서setting을 사용합니다.py 파일의 TEMPLATES 설정 항목으로 불러오고 렌더링된 템플릿을 수정하고 polls에templates 디렉터리를 만들고 디렉터리 polls를 만들고 그 안에 새 파일 index를 만듭니다.html index.html
{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}a>li>
    {% endfor %}
    ul>
{% else %}
    <p>No polls are available.p>
{% endif %}

view.py
from django.http import HttpResponse
from django.template import loader

from .models import Question


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    template = loader.get_template('polls/index.html')
    context = {
        'latest_question_list': latest_question_list,
    }
    return HttpResponse(template.render(context, request))

render () 이전에 웹 페이지로 돌아가는 방법: 템플릿을 불러오고 위아래 문장을 채우고 HttpResponse 대상을 되돌려줍니다. 여기에서 render1 함수를 직접 사용할 수 있습니다.
from django.shortcuts import render

from .models import Question


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)

404 수정view를 던지고 문제가 없을 때 404를 던집니다:
from django.http import Http404
from django.shortcuts import render

from .models import Question
# ...
def detail(request, question_id):
    try:
        question = Question.objects.get(pk=question_id)
    except Question.DoesNotExist:
        raise Http404("Question does not exist")
    return render(request, 'polls/detail.html', {'question': question})

polls/index.html
{{ question }}


함수 간소화getobject_or_404 () 템플릿에서 하드코딩 URL의 원래 index를 제거합니다.html
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}a>li>

... 로 바꾸다
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>

URL () 함수의name을 통해 URL 이름으로 이름 공간을 URL에 추가합니다.py에 app 추가name 설정 네임스페이스:
from django.urls import path

from . import views

app_name = 'polls'
urlpatterns = [
    path('', views.index, name='index'),
    path('/', views.detail, name='detail'),
    path('/results/', views.results, name='results'),
    path('/vote/', views.vote, name='vote'),
]

index.html
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}a>li>

Django 양식:detail 업데이트html
<h1>{{ question.question_text }}h1>

{% if error_message %}<p><strong>{{ error_message }}strong>p>{% endif %}

<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}">
    <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}label><br>
{% endfor %}
<input type="submit" value="Vote">
form>

urls.py에서 vote에 name 추가:
path('/vote/', views.vote, name='vote'),

request.POST는 키워드 이름으로 제출한 데이터를 얻을 수 있는 클래스 사전 대상입니다.이 예에서,request.POST['choice'] 선택한 Choice의 ID를 문자열로 반환합니다.만약 Request에 있다면.POST['choice'] 데이터에choice가 제공되지 않았습니다. POST는 키에로로 하여금 Choice의 득표수를 늘린 후에 코드가 자주 사용하는 HttpResponseRedirect가 아닌 HttpResponse, HttpResponseRedirect를 되돌려줍니다. 사용자가 방향을 바꿀 URL은 이 예에서 HttpResponseRedirect의 구조 함수에서reverse() 함수를 사용합니다.이 함수는 보기 함수에서 URL을 하드코딩하는 것을 피합니다.

좋은 웹페이지 즐겨찾기