model模型
from django.db import models
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200, unique=True)
pub_date = models.DateTimeField() #不加Field,没有时分秒
class Chioce(models.Model):
chioce_text = models.CharField(max_length=200, unique=True)
votes = models.IntegerField(default=0)
question = models.ForeignKey(Question) #如果想要修改字段名,在配置文件中修改之后,重新生成表
python manage.py makemigrations
python manage.py migrate
# polls/admin.py
from django.contrib import admin# 在当前目录下的models模块中导入模型
from .models import Question, Choice
# Register your models here.
admin.site.register(Question)
admin.site.register(Choice)
class Question(models.Model):
question_text = models.CharField(max_length=200, unique=True)
pub_date = models.DateTimeField()
def __str__(self):
return question:%s % self.question_text
class Chioce(models.Model):
chioce_text = models.CharField(max_length=200, unique=True)
votes = models.IntegerField(default=0)
question = models.ForeignKey(Question)
def __str__(self):
return %s:%s % return %s:%s % (self.question,self.chioce_text)
Django API(首页)
# polls/views.py
from django.shortcuts import render
from .models import Question
def index(request):
questions = Question.objects.order_by(-pub_date)
returnrender(request, index.html, {questions: questions})
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>投票首页title>
head>
<body>
<div class="container">
<div class="content">
<h1>投票首页h1>
<ol>
{% for question in questions %}
<li>
<a href="{% url a question.id %}" target="_blank">
#question_id是views.py中的d+这个参数,数据库中没有指定主键时Django会自动创建主键,question_id就是问题的id号
{{ question.question_text }}a>
{{ question.pub_date }}
li>
{%endfor%}
ol>
div>
div>
body>
html>
<div class="container">
<div id="linux-carousel" class="carousel slide">
<ol class="carousel-indicators">
<li class="active" data-target="#linux-carousel" data-slide-to="0">li> #轮播图下面的小圆点
<li data-target="#linux-carousel" data-slide-to="1">li>
<li data-target="#linux-carousel" data-slide-to="2">li>
ol>
<div class="carousel-inner">
<div class="item active">
<a href="http://www.sogou.com" target="_blank">
<img src="{% static imgs/first.jpg %}">
a>
div>
<div class="item">
<img src="{% static imgs/second.jpg %}">
div>
<div class="item">
<img src="{% static imgs/third.jpg %}">
div>
div>
<a href="#linux-carousel" data-slide="prev" class="carousel-control left"> <span class="glyphicon glyphicon-chevron-left">span> #向左翻
制作投票详情页
a>
<a href="#linux-carousel" data-slide="next" class="carousel-control right"> <span class="glyphicon glyphicon-chevron-right">span> #向右翻
a>
div>
<script src="{% static js/jquery.min.js %}">script> #要有JS代码才能实现轮播图
<script src="{% static js/bootstrap.min.js %}">script>
<script type="text/javascript">
# 在basic.html中,将个性(不相同)内容用block替代
{% load static %}
<html lang="en">
<head><meta charset="UTF-8">
<title>{% block title %}{% endblock %}title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="{% static css/bootstrap.min.css %}">
head>
<body>
<div class="container">
<div id="linux-carousel" class="carousel slide">
<ol class="carousel-indicators">
<li class="active" data-target="#linux-carousel" data-slide-to="0">li>
<li data-target="#linux-carousel" data-slide-to="1">li>
<li data-target="#linux-carousel" data-slide-to="2">li>
ol>
<div class="carousel-inner">
<div class="item active">
<a href="http://www.sogou.com" target="_blank">
<img src="{% static imgs/first.jpg %}"> #图片放在polls下static目录的imgs目录中
a>
div>
<div class="item">
<img src="{% static imgs/second.jpg %}">
div>
<div class="item">
<img src="{% static imgs/third.jpg %}">
div>
div>
<a href="#linux-carousel" data-slide="prev" class="carousel-control left"> <span class="glyphicon glyphicon-chevron-left">span>
制作投票详情页 a>
<a href="#linux-carousel" data-slide="next" class="carousel-control right"> <span class="glyphicon glyphicon-chevron-right">span>
a>
div>
{% block content %}{% endblock %}
<script src="{% static js/jquery.min.js %}">script>
<script src="{% static js/bootstrap.min.js %}">script>
<script type="text/javascript">script>
body>
html>
# 修改index.html,把共性内容删除,个性内容写到对应的block中
{% extends bak.html %} #继承
{% load static %}
{% block title %}投票首页{% endblock %}
{% block content %}class="content h4">class="text-center text-warning">投票首页
"margin: 20px 0">
{% for question in questions %}- "{% url detail question.id %}" target="_blank">
{% endfor %}
{{ question.question_text }} {{ question.pub_date }}
{% endblock %}
制作a.html(次页)
from django.shortcuts import render
from .models import Question, Chioce
# Create your views here.
def index(request):
d = Question.objects.order_by(-pub_date)
return render(request,index.html,{d:d})
def a(request,question_id):
c = Question.objects.get(id=question_id)
return render(request,a.html,{id:c})
def result(request,id):
return render(request,result.html,{id:id})
{% extends bak.html%}
{% load static %}
{% block title%}polls{%endblock%}
{% block content%}
<div class="container">
<h1>{{ id.id }}h1>
div>
<div class="content h4 text-warning" >
<h1 class="text-center">chioceh1>
<h2>{{ id }}h2>
<form action="">
{% csrf_token %} #安全选项
{% for i in id.chioce_set.all %}
<div class="radio">
<label >
<input type="radio" name="chioce_id" value="{{ chioce_id }}">
{{ i.chioce_text }}
label>
div>
{% endfor %}
form>
div>
<div class="group">
<input class="btn btn-primary" tpye="submit" value="submit">
div>
{%endblock%}
实现投票功能
from django.conf.urls import url,include
from django.contrib import admin
from . import views
urlpatterns = [
url(r^$, views.index,name=index),
url(r(d+)/$, views.a,name=a),
url(r(d+)/result/$, views.result,name=result),
url(r(d+)/vote/$, views.vote,name=vote),
]
from django.shortcuts import render, redirect
from .models import Question, Chioce
# Create your views here.
def index(request):
d = Question.objects.order_by(-pub_date)
return render(request,index.html,{d:d})
def a(request,question_id):
c = Question.objects.get(id=question_id)
return render(request,a.html,{id:c})
def result(request,id):
return render(request,result.html,{id:id})
def vote(request,id):
d = Question.objects.get(id=id) #取出问题
# 当用户提交表单时,request.POST是一个字典,里面记录了与POST相关的数据
# choice_id是detail.html页面中单选按钮的name,值是选项的id(value的值)
chioce_id = request.POST.get(chioce_id) #取出name的值
chioce = d.chioce_set.get(id=chioce_id) #取出对用id的项
chioce.votes += 1
chioce.save()
# 这里返回使用的不是render,因为render直接返回页面,URL不变,也就是http://x.x.x.x/polls/2/vote显示的是2号问题的投票结果,这是不合理的应该由http://x.x.x.x/polls/2/result/显示投票结果。所以使用redirect
return redirect(result,id)
{% extends bak.html%}
{% load static %}
{% block title%}polls{%endblock%}
{% block content%}
<div class="container">
<h1>{{ id.id }}h1>
div>
<div class="content h4 text-warning" >
<h1 class="text-center">chioceh1>
<h2>{{ id }}h2>
<form action="{% url vote id.id %}" method="post">
{% csrf_token %}
{% for i in id.chioce_set.all %}
<div class="radio">
<label >
<input type="radio" name="chioce_id" value="{{ i.id }}">
{{ i.chioce_text }}
label>
div>
{% endfor %}
<div class="form-group">
<input class="btn btn-primary" type="submit" value="submit">
div>
form>
div>
{%endblock%}
配置result.html
from django.shortcuts import render, redirect
from .models import Question, Chioce
# Create your views here.
def index(request):
d = Question.objects.order_by(-pub_date)
return render(request,index.html,{d:d})
def a(request,question_id):
c = Question.objects.get(id=question_id)
return render(request,a.html,{id:c})
def result(request,id):
d = Question.objects.get(id=id)
return render(request,result.html,{id:d})
def vote(request,id):
d = Question.objects.get(id=id)
chioce_id = request.POST.get(chioce_id)
chioce = d.chioce_set.get(id=chioce_id)
chioce.votes += 1
chioce.save()
return redirect(result,id)
{% extends bak.html%}
{% load static %}
{% block title%}投票结果{%endblock%}
{% block content%}
<div>
<h1 class="text-center">{{ id.id }}投票结果h1>
<table class="table table-striped table-hover">
<thead class="bg-primary">
<tr>
<td colspan="2">{{ id.question_text }}td>
tr>
thead>
{% for i in id.chioce_set.all %}
<tr>
<td>{{ i.chioce_text }}td>
<td >{{ i.votes }}td>
tr>
{%endfor%}
table>
div>
{%endblock%}
end
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129646.html
摘要:创建投票应用采用创建的工程包括两个层级,一个是叫工程,另外一个是工程下面的应用。一个工程可以包含多个应用。路由配置分成两个层级,一个是在应用层配置路由,另外一个是在工程层配置路由。 一般Django的网络程序开发步骤 配置开发的环境 初始化项目 启动开发服务器 创建应用 创建View 配置访问View的路由 配置项目开发环境 开发一个新的项目,第一步就是配置项目的开发环境。这里使用...
摘要:本文结合官方文档中的个小教程,帮你了解。一共分上下两篇文章,上篇主要来分析处理的机制,下篇来介绍下提供的后台管理,以及单元测试等强大的功能。项目创建成功之后,可以运行生成相应的数据库表是引入的命令,较早的版本可以用其他的命令代替。 原文地址 相信用过python的人都听过Django的大名,知道它是一个web框架,用来支持动态网站、网络应用程序以及网络服务的开发。那么为什么我们需要...
摘要:上周,在举行的上,发布,整合和。多亏存储应用程序会话到数据库通常来说是下载安装或者是,我们不需要特定的负载均衡器,运行完全没有问题。用负载均衡器描述的展示了浮动和私有集群。特别感谢来自的的支持和在测试过程中作出的贡献。 上周,在Austin举行的OpenStack Summit上,CoreOS发布Stackanetes,整合Kubernetes和OpenStack。 一个月前,Core...
摘要:在谈中框架和框架的区别之前,我们需要先探讨如下几个问题。通过大数据统计分析全球著名的网站对和这两个框架的调查分析。从全球著名的代码托管平台上的和数量上分别为,分别为。 在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题。 一、为什么要使用框架? showImg(https://segmentfault.com/img/remote/14600000...
摘要:协议是为分布式协调服务专门设计的一种支持崩溃恢复的一致性协议,这个机制保证了各个之间的同步。选主是协议中最为重要和复杂的过程。以实际效果而言,分区相当于对通信的时限要求。参考官方文档阿里巴巴为什么不用做服务发现定理的含义阮一峰 前言 同学们,在上一章中,我们主要讲了Zookeeper两种启动模式以及具体如何搭建。本章内容主要讲的是集群相关的原理内容,第一章可以当做是Zookeeper原...
Django前端页面测试 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; margin...
阅读 1251·2023-01-11 13:20
阅读 1566·2023-01-11 13:20
阅读 1019·2023-01-11 13:20
阅读 1702·2023-01-11 13:20
阅读 3973·2023-01-11 13:20
阅读 2546·2023-01-11 13:20
阅读 1356·2023-01-11 13:20
阅读 3494·2023-01-11 13:20