Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >django2.0入门教程第四节

django2.0入门教程第四节

作者头像
章鱼喵
发布于 2018-06-27 07:23:41
发布于 2018-06-27 07:23:41
81100
代码可运行
举报
文章被收录于专栏:codingcoding
运行总次数:0
代码可运行

继上篇 django2.0入门教程第三节,介绍了django2.0的视图views和模板template, 本节介绍如何在前台进行投票。

构建一个简单的表单提交页

polls/templates/polls/detail.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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 id="choice{{ forloop.counter }}" type="radio" name="choice" value="{{ choice.id }}">
    <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
    {% endfor %}
    <br />
    <input type="submit" name="" id="" value="投票" />
</form>

代码解析:

  • form表单提交的url为{%url 'polls:vote' question.id %}, 即表示访问polls/views.py的vote方法,并携带问题id作为参数。
  • 将问题的相关选项遍历,以单选框显示
  • form表单用post方式提交数据

配置url

polls/urls.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
path('<int:question_id>/vote/', views.vote, name='vote'),

投票页面截图 http://127.0.0.1:8000/polls/1/

vote.png

视图层处理提交结果

polls/views.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from .models import Question, Choice
# ...
def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        return render(request, 'polls/detail.html', {
            'question': question,
            'error_message': "必须选择一个选项",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

代码解析:

  • request.POST['choice']接收表单页面提交的数据
  • 将投票次数加1,并更新数据库

显示投票结果

polls/views.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.shortcuts import render, get_object_or_404
# ...
def results(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/results.html', {'question': question})

results.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{ choice.choice_text }} -- {{choice.votes}}</li>
{% endfor %}
</ul>

<a href="{% url 'polls:detail' question.id %}">再投一次?</a>

提交结果页面 http://127.0.0.1:8000/polls/1/results/

result.png

优化url和view写法

另一种写法:

将主键id代替question_id

polls/urls.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#_*_coding:utf8_*_
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('<int:pk>/', views.DetailView.as_view(), name='detail'),
    path('<int:pk>/results/', views.ResultsView.as_view(), name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

使用<pk>代替<question_id>会更加灵活,<pd>代表主键

相应的视图也需要修改成另一种写法,vote方法保持原样,用于比较两种写法的不同

polls/views.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#_*_coding:utf8_*_
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.views import generic 
from .models import Question, Choice

class IndexView(generic.ListView):
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self):
        return Question.objects.order_by('-pub_date')[:5]

class DetailView(generic.DetailView):
    model = Question
    template_name = 'polls/detail.html'

class ResultsView(generic.DetailView):
    model = Question
    template_name = 'polls/results.html'

def vote(request, question_id):
    # ...

入门教程不会对代码进入深入的讲解,先大致了解其作用即可,后续再逐个模块进行解析

源码下载

相关源码包

如果对django2.0教程感兴趣,请关注我的简书,持续更新中...

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.01.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
django 学习笔记三
拦截到url 后,通过拦截到的URL和 request 做一些不同的响应(response)
onety码生
2018/11/21
4770
Django学习笔记 1.4 表单和通用视图
更新一下在上一个教程中编写的投票详细页面的模板 (“polls/detail.html”) ,增加一个 HTML 元素:
twowinter
2020/04/17
8310
基于django的视频点播网站开发-step5-详情页功能
在本讲中,我们开始详情页功能的开发,详情页就是对单个视频进行播放并展示视频的相关信息,比如视频标题、描述、评论信息、相关推荐等。我们将会学习到通用视图类DetailView的使用、评论动态加载、以及如何通过ajax实现喜欢和收藏功能,并通过一段段很酷的代码来说明这些功能。
西门吹雪1997
2019/02/13
2.2K0
django2.0入门教程第三节
继上篇django2.0入门教程第二节,介绍了对django2.0模型类models的操作,本篇主要讲视图views和模板template django的视图用于处理url请求,并将响应的数据传递到模板,最终浏览器将模板数据进行渲染显示,用户就得到了想要的结果 作为一个简易的投票系统, 除了index(主页), 还需要detail(详情页), results(结果页), vote(投票页) 这些视图。 增加视图:polls/views.py #_*_coding:utf8_*_ from django.sh
章鱼喵
2018/06/21
6880
Python-Django 第一个Django app
下载地址:https://www.python.org/downloads/release/python-340/
授客
2019/09/11
1.3K0
Python-Django 第一个Django app
Django来敲门~第一部分【9.使用Django内置视图处理对象简化开发】
首先,要说这是Django基础部分的最后一个章节了。后面会详细讲解Django每一部分的使用方式和API了
大牧莫邪
2018/08/27
9490
Django 1.10中文文档-第一个应用Part4-表单和通用视图
目录[-] 本教程接Part3开始。继续网页投票应用程序,并将重点介绍简单的表单处理和精简代码。 一个简单表单 更新一下在上一个教程中编写的投票详细页面的模板polls/detail.html,让它包含一个HTML<form> 元素: # polls/templates/polls/detail.html <h1>{{ question.question_text }}</h1> {% if error_message %}<p><strong>{{ error_message }}</stron
jhao104
2018/03/20
2.4K0
django 1.8 官方文档翻译: 1-2-4 编写你的第一个Django应用,第4部分
本教程上接 教程 第3部分 。我们将 继续开发 Web-poll 应用并且关注在处理简单的窗体和优化我们的代码。
ApacheCN_飞龙
2022/11/27
1.6K0
基于Django1.11和Python3
a. 先在VotingSystem项目目录下新建一个templates文件夹,注意文件夹权限和属组
py3study
2020/01/03
5050
Django快速入门——投票程序(3)视图
原教程说的比较抽象,这里简单认为视图就是views.py中的函数,用于处理数据并渲染网页。我们的投票应用中,需要下列几个视图:
一只大鸽子
2023/09/02
2990
Django快速入门——投票程序(3)视图
七日Python之路--第三天(之初试Django 2-2)
接上文。前面(1)(2)部分已经实现浏览器访问工程项目,并且能后台管理新创建的app。
lpe234
2020/07/27
3770
First Django App!
  上篇笔记从零创建了一个django项目,一个项目肯定是由多个模块组成的,比方说一个电商项目,包括支付模块,商品展示模块,商家用户聊天模块等等,这些模块便可称之为一个应用。
小孙同学
2022/01/17
2.1K0
First Django App!
Django2.2帮助文档的第一个例子:一个简易的投票系统—Prat3_4
https://docs.djangoproject.com/en/2.2/intro/tutorial01/
用户7010445
2020/03/06
5740
Django来敲门~第一部分【7.网页中的表单处理】
首先改造我们的问题详细信息页面details.html,用于展示问题的同时,展示对应的解决方案;对于解决方案可以进行投票
大牧莫邪
2018/08/27
5390
Django 学习笔记 1.3 视图和模板
前一节是后端的内容,这一节则是前端的内容,我们将继续编写投票应用,并且专注于如何创建公用界面——也被称为“视图”。
twowinter
2020/04/17
1.3K0
Django 1.10中文文档-第一个应用Part3-视图和模板
目录[-] 本教程上接Django 1.10中文文档-第一个应用Part2-模型和管理站点。我们将继续开发网页投票这个应用,主要讲如何创建一个对用户开放的界面。 概览 视图是Django应用中的一“类”网页,它通常使用一个特定的函数提供服务,并且具有一个特定的模板。例如,在博客应用中,可能有以下视图: 博客首页 —— 显示最新发表的博客; 博客“详细”页面 —— 每博客的链接页面; 基于年份的归档页面 —— 显示特定年内所有月份发表过的博客; 基于月份的归档页面 —— 显示特定月份内
jhao104
2018/03/20
2.4K0
Django快速入门——投票程序(4,6)表单&界面、风格
我们更新一下在上一个教程中编写的投票详细页面的模板 ("polls/detail.html") ,让它包含一个 HTML <form> 元素(即表单)
一只大鸽子
2023/09/02
3260
Django快速入门——投票程序(4,6)表单&界面、风格
Django来敲门~第一部分【6.1 视图函数】
在我们创建好的应用polls/中,可以定义视图函数,专门用于接收和响应URL请求操作的函数; 该函数默认第一个参数接收的就是一个请求对象HttpRequest,通常我们会将第一个参数写成request;函数后面的其他参数就是可以从URL路径中接收的参数数据了。
大牧莫邪
2018/08/27
2850
Django 教程 --- Django CRUD
Django是一个基于Python的Web框架,它使您可以快速创建Web应用程序,而不会遇到通常在其他框架中会发现的所有安装或依赖性问题。Django基于MVT(模型视图模板)体系结构,并围绕CRUD(创建,检索,更新,删除)操作展开。最好将CRUD解释为构建Django Web应用程序的一种方法。通常,CRUD意味着对数据库中的表执行创建,检索,更新和删除操作。让我们讨论一下CRUD的实际含义,
公众号---人生代码
2020/05/25
2.1K0
Django 3.1 官网学习路线
如果这是您第一次使用 Django,那么您必须进行一些初始设置。也就是说,您需要自动生成一些建立 Django 项目的代码——Django 实例的设置集合,包括数据库配置、特定于 Django 的选项和特定于应用程序的设置。 从命令行,cd 到您想存储代码的目录,然后运行以下命令:
cuijianzhe
2022/06/14
8.3K0
Django 3.1 官网学习路线
相关推荐
django 学习笔记三
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验