Django(四)-搭建第一个应用(3)

一、问题详情页

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>展示某个投票的问题和不带结果的选项列表</title>
</head>
<body><form action="{% url 'polls:vote' question.id %}"  method="post">
{% csrf_token %}
<fieldset><legend><h1>{{ question.question_text }}</h1></legend>{% if error_message %}<p><strong> {{ error_message }}</strong> </p> {% endif %}{% 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><li>{{ choice.choice_text }}</li>{% endfor %}
</fieldset>
<input type="submit" value="Vote">
</form>
</body>
</html>

二、问题结果页

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1> {{ question.question_text }}</h1>
<ul>{% for choice in question.choice_set.all %}<li> {{ choice.choice_test }} -- {{ choice.votes }}</li>{%  endfor %}
</ul>{# 跳转到某一问题的投票详情页#}
<a href="{% url 'polls:detail' question.id %}">vote again?</a></body>
</html>

 三、投票处理器视图

# 3.投票处理器:用于响应用户为某个问题的特定选项投票的操作
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",{"quesiton":question,"error_message":"You didn't select a choice"})else:selected_choice.votes = F("votes") + 1selected_choice.save()return HttpResponseRedirect(reverse("polls:results",args=(question.id,)))

 四、引入通用视图之前的urlCONF

from django.urls import pathfrom . import views# 为视图函数配置url
# name
# 设置app的命名空间,主要是为了区分不同app下相同名字的视图
app_name = "polls"
urlpatterns = [# 当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。# 比如URLconf 在处理请求 https://www.example.com/myapp/ 时,它会尝试匹配 myapp/path("",views.index,name= "index"),path("<int:question_id>/",views.detail,name = "detail"),path("<int:question_id>/results/", views.results, name = "results"),path("<int:question_id>/vote/", views.vote, name = "vote"),
]

五、引入通用视图

from django.db.models import F
from django.http import HttpResponse, Http404,HttpResponseRedirect
from django.shortcuts import render, get_object_or_404
from django.urls import reverse
from django.views.generic import ListView
from django.views import generic# Create your views here.from .models import Question,Choiceclass indexView(generic.ListView):# 默认情况下,ListView使用一个叫做 <app name>/<model name>_list.html的默认模板# 因此默认模板为polls/index_list.html# 此例我本手动指定template_name为"polls/index.html"template_name = "polls/index.html"# 默认的上下文变量名(其对应的值会传递到index.html)为question_list(命名规则:模板名小写_list)# 因为之前的代码中,在index.html中引用的变量名都是latest_question_list,因此使用context_object_name覆盖默认的行为context_object_name = "latest_question_list"# 如果不重写get_queryset,而使用默认的 model = Question# 其实等价于 Question.objects.all()def get_queryset(self):"""返回最近5个发布的问题"""return Question.objects.order_by("-pub_date")[:5]# latest_question_list = Question.objects.order_by("-pub_date")[:5]# context = {"latest_question_list":latest_question_list}# return  render(request,"polls/index.html",context)# output = ", ".join([q.question_text for q in latest_question_list])# return HttpResponse(output)# 1.问题详情页:展示某个投票的问题和不带结果的选项列表
class detailView(generic.DetailView):model =  Questiontemplate_name = "polls/detail.html"# 404异常处理-传统方式# try:#     question = Question.objects.get(pk=question_id)# except Question.DoesNotExist:#     raise Http404("Quesition does not exit")# 404异常处理-利用Django提供的函数# question = get_object_or_404(Question,pk=question_id)# return render(request,"polls/detail.html",{"question":question})# 2.问题结果页:展示某个投票的结果
class resultsView(generic.DetailView):model = Questiontemplate_name = "polls/result.html"# question = get_object_or_404(Question,pk= question_id)# return render(request,"polls/result.html",{"question":question})# 3.投票处理器:用于响应用户为某个问题的特定选项投票的操作
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",{"quesiton":question,"error_message":"You didn't select a choice"})else:selected_choice.votes = F("votes") + 1selected_choice.save()return HttpResponseRedirect(reverse("polls:results",args=(question.id,)))

 六、引入通用视图之后的urlCONF

第二和第三个模式的路径字符串中匹配的模式名称已从 <question_id> 更改为 <pk>。这是因为我们将使用 DetailView 通用视图来替换我们的 detail() 和 results() 视图,它期望从 URL 中捕获的主键值被称为 "pk"

from django.urls import pathfrom . import views# 为视图函数配置url
# name
# 设置app的命名空间,主要是为了区分不同app下相同名字的视图
app_name = "polls"
urlpatterns = [# 当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。# 比如URLconf 在处理请求 https://www.example.com/myapp/ 时,它会尝试匹配 myapp/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"),
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024最全的Sora学习资料合集

2024最全的Sora学习资料合集&#xff0c;共5专题、30份资料。 点击前往星球下载地址&#xff08;文末领取优惠券&#xff09;&#xff1a;https://t.zsxq.com/186rJ8iZL 1、Sora专属提示词库 2、Sora专属教程 3、Sora学习文章 4、Sora提示词技巧 5、Sora-AI视频全网最全收集(…

idea默认代码生成脚本修改

修改了下idea自带的代码生成脚本&#xff0c;增加了脚本代码的注释&#xff0c;生成了controller&#xff0c;service&#xff0c;impl&#xff0c;mapper&#xff0c;里面都是空的&#xff0c;具体可以根据自己的代码习惯增加 代码生成脚本的使用可以看下使用 idea 生成实体类…

CAS中的ABA问题

ABA 问题是指在并发编程中&#xff0c;一个值从 A 变成 B&#xff0c;然后再变回 A&#xff0c;而导致误判的问题。在 CAS&#xff08;Compare and Swap&#xff09;等原子操作中&#xff0c;由于线程间的竞争&#xff0c;可能会发生 ABA 问题。 为了解决 ABA 问题&#xff0c…

Pycharm服务器配置python解释器并结合内网穿透实现公网远程开发

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

spring boot3自定义注解+拦截器+Redis实现高并发接口限流

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 内容简介 实现思路 实现步骤 1.自定义限流注解 2.编写限流拦截器 3.注册拦截器 4.接口限流测试 写在前…

sql中使用了in直接卡死

项目场景&#xff1a; 最近在做数据迁移的工作&#xff0c;会员库有200多万数据&#xff0c;组织机构有4万数据。要把这些数据迁移到新系统的数据库中&#xff0c;开发新系统之前完全没考虑过数据量。当数据导入之后&#xff0c;页面就各种报错。。。。。。。。。。。。。。。…

外包干了8天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【ZZULIOJ】1009: 求平均分(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 已知某位学生的数学、英语和计算机课程的成绩&#xff0c;求该生三门课程的平均分。 输入 输入三个整数&#xff0c;数据之间由空格隔开。 输出 输出占一行&#xff0c;包含一个实数&#xff0c…

Redis命令介绍

一、redis启动&#xff1a; 本地启动&#xff1a;redis-cli 远程启动&#xff1a;redis-cli -h host -p port -a password Redis 连接命令 1 AUTH password 验证密码是否正确 2 ECHO message 打印字符串 3 PING 查看服务是否运行 4 QUIT 关闭当前连接 5 SELECT index 切换…

2024.3.28abc晚训题解

VJ晚训网址点击传送晚训 A题 比较巧的输入方式就是循环n&#xff0c;内层套一个循环7 #include<bits/stdc.h> using namespace std; int main(){int n;cin>>n;for(int i1;i<n;i){int ans0;for(int j1;j<7;j){int x;cin>>x;ansansx; }cout<<ans…

JUC内容概述

复习概念 Sleep和Wait的区别 Sleep是Thread的静态方法&#xff0c;wait是Object的方法&#xff0c;任何对象实例都可以使用sleep不会释放锁&#xff0c;他也不需要占用锁&#xff0c;暂停。wait会释放锁&#xff0c;但是调用他的前提是线程占有锁他们都可以被Interrupted方法…

SQLite数据库文件损坏的可能几种情况(一)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十三&#xff09; 下一篇&#xff1a;SQLite使用的临时文件&#xff08;二&#xff09; 概述 SQLite数据库具有很强的抗损坏能力。如果应用程序崩溃&#xff0c…

鸿蒙hdc使用指导

简介 hdc&#xff08;HarmonyOS Device Connector&#xff09;是HarmonyOS为开发人员提供的用于调试的命令行工具&#xff0c;通过该工具可以在windows/linux/mac系统上与真实设备或者模拟器进行交互。 环境准备 hdc工具通过HarmonyOS SDK获取&#xff0c;存放于SDK的toolch…

2024-3-28 市场情绪强修复

这一轮退潮负反馈都修复了&#xff0c; 艾艾精工 博信股份 安奈尔 永悦科技 大理药业 &#xff0c;高新发展 也补跌了&#xff0c;收尸队也干活了&#xff0c;情绪不修复不接力得最好写照。这轮周期 宁科生物 已经7板&#xff0c;已经追平了 博信股份7板&#xff0c;看明天溢…

Mac安装minio

Mac安装minio 本文介绍使用 mac 安装 MinIO。 所有软件安装优先参考官网&#xff1a;MinIO Object Storage for MacOS — MinIO Object Storage for MacOS #使用 brew 安装 minio brew install minio/stable/minio#找到 minio tong ~ $ brew list minio /opt/homebrew/Cella…

银行监管报送系统介绍(十二):非居民金融账户涉税信息报送

国家税务总局、财政部、中国人民银行、中国银行业监督管理委员会、中国证券监督管理委员会、国家金融监督管理总局2017年5月9日发布、2017年7月1日起施行的《非居民金融账户涉税信息尽职调查管理办法》。 一、《管理办法》出台的背景是什么&#xff1f;   受二十国集团&…

math模块篇(四)

文章目录 math.ldexp(x, i)math.modf(x)math.nextafter(x, y, steps1)math.perm(n, kNone)math.prod(iterable, *, start1) math.ldexp(x, i) math.ldexp(x, i) 是 Python 中 math 模块的一个函数&#xff0c;用于执行二进制标度操作。它接受两个参数&#xff1a;尾数&#xf…

【unity】如何汉化unity Hub

相信大家下载安装unity后看着满操作栏的英文&#xff0c;英文不好的小伙伴们会一头雾水。但是没关系你要记住你要怎么高速运转的机器进入中国&#xff0c;请记住我给出的原理&#xff0c;不懂不代表不会用啊。现在我们就来把编译器给进行汉化。 第一步&#xff1a;我们打开Uni…

【VTKExamples::Points】第十一期 RadiusOutlierRemoval

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例RadiusOutlierRemoval,并解析接口vtkRadiusOutlierRemoval,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的…

【消息队列开发】 实现 MqClientTests 类——测试客户端

文章目录 &#x1f343;前言&#x1f333;所需属性&#x1f334;BeforeEach&#x1f332;AfterEach&#x1f38d;API测试⭕总结 &#x1f343;前言 本次开发任务 测试客户端接口 &#x1f333;所需属性 所需要一共三个属性 BrokerServer&#xff1a;服务器 ConnectionFa…