成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Django實際應(yīng)用-投票程序(三)

IT那活兒 / 1980人閱讀
Django實際應(yīng)用-投票程序(三)

點擊上方“IT那活兒”,關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了?。?!


01


model模型


1.1 ORM架構(gòu)介紹

  • object :對象﹐對應(yīng)django模型中的class
  • Relationship:關(guān)系﹐對應(yīng)關(guān)系型數(shù)據(jù)庫
  • Mapping:映射
  • 一個class對應(yīng)數(shù)據(jù)庫中的一張表
  • 表中的字段與class中的類變量對應(yīng)
  • 數(shù)據(jù)庫中的數(shù)據(jù)類型也與django模型中的類映射
  • 表中的每個記錄都與class的實例對應(yīng)

1.2 編寫models.py

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) #如果想要修改字段名,在配置文件中修改之后,重新生成表

1.3 生成表

python manage.py makemigrations

python manage.py migrate

1.4 將模型加入到后臺頁面

# polls/admin.py

from  django.contrib import  admin# 在當(dāng)前目錄下的models模塊中導(dǎo)入模型

from .models import   Question, Choice

# Register your models here.

admin.site.register(Question)

admin.site.register(Choice)

1.5 問題解決辦法

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)

02


Django API(首頁)



2.1 在views文件中把問題取出來傳給html

# 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})

2.2 編輯index.html



<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+這個參數(shù),數(shù)據(jù)庫中沒有指定主鍵時Django會自動創(chuàng)建主鍵,question_id就是問題的id號

{{ question.question_text }}a>

     {{ question.pub_date }}

li>

{%endfor%}

ol>

div>

div>

body>

html>

2.3 可以添加輪播圖

<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代碼才能實現(xiàn)輪播圖

<script src="{% static js/bootstrap.min.js %}">script>

<script type="text/javascript">

2.4 模板繼承(為了避免一些網(wǎng)頁的重復(fù)代碼)

1)復(fù)制index.html一本命令為bak.html

# 在basic.html中,將個性(不相同)內(nèi)容用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>

2)index.html

# 修改index.html,把共性內(nèi)容刪除,個性內(nèi)容寫到對應(yīng)的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 %}

  1. "{% url detail question.id %}" target="_blank">

    {{ question.question_text }}
    {{ question.pub_date }}

  2. {% endfor %}





{% endblock %}

03


制作a.html(次頁)


3.1 編輯views.py

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})

3.2 編輯a.html(取出選項)

{% 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%}

04


實現(xiàn)投票功能


實現(xiàn)數(shù)據(jù)庫的增刪改查。執(zhí)行函數(shù)對model模型的操作(url-->views-->model)

4.1 配置urls.py

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),

]

4.2 配置views.py

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) #取出問題

# 當(dāng)用戶提交表單時,request.POST是一個字典,里面記錄了與POST相關(guān)的數(shù)據(jù)

# 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號問題的投票結(jié)果,這是不合理的應(yīng)該由http://x.x.x.x/polls/2/result/顯示投票結(jié)果。所以使用redirect

return redirect(result,id)

4.3 配置a.html

{% 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%}


05


配置result.html


5.1 views.py

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)

5.2 配置resul.html

{% extends bak.html%}

{% load static %}

{% block title%}投票結(jié)果{%endblock%}

{% block content%}

<div>

<h1 class="text-center">{{ id.id }}投票結(jié)果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




本文作者:周世豪

本文來源:IT那活兒(上海新炬王翦團(tuán)隊)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/129646.html

相關(guān)文章

  • Django 2.0 - 創(chuàng)建第一個Django應(yīng)用 - 第一部分

    摘要:創(chuàng)建投票應(yīng)用采用創(chuàng)建的工程包括兩個層級,一個是叫工程,另外一個是工程下面的應(yīng)用。一個工程可以包含多個應(yīng)用。路由配置分成兩個層級,一個是在應(yīng)用層配置路由,另外一個是在工程層配置路由。 一般Django的網(wǎng)絡(luò)程序開發(fā)步驟 配置開發(fā)的環(huán)境 初始化項目 啟動開發(fā)服務(wù)器 創(chuàng)建應(yīng)用 創(chuàng)建View 配置訪問View的路由 配置項目開發(fā)環(huán)境 開發(fā)一個新的項目,第一步就是配置項目的開發(fā)環(huán)境。這里使用...

    TalkingData 評論0 收藏0
  • 兩篇文章幫你入門Django(上)

    摘要:本文結(jié)合官方文檔中的個小教程,幫你了解。一共分上下兩篇文章,上篇主要來分析處理的機(jī)制,下篇來介紹下提供的后臺管理,以及單元測試等強(qiáng)大的功能。項目創(chuàng)建成功之后,可以運(yùn)行生成相應(yīng)的數(shù)據(jù)庫表是引入的命令,較早的版本可以用其他的命令代替。 原文地址 相信用過python的人都聽過Django的大名,知道它是一個web框架,用來支持動態(tài)網(wǎng)站、網(wǎng)絡(luò)應(yīng)用程序以及網(wǎng)絡(luò)服務(wù)的開發(fā)。那么為什么我們需要...

    shuibo 評論0 收藏0
  • Kubernetes和OpenStack的多云端網(wǎng)絡(luò)

    摘要:上周,在舉行的上,發(fā)布,整合和。多虧存儲應(yīng)用程序會話到數(shù)據(jù)庫通常來說是下載安裝或者是,我們不需要特定的負(fù)載均衡器,運(yùn)行完全沒有問題。用負(fù)載均衡器描述的展示了浮動和私有集群。特別感謝來自的的支持和在測試過程中作出的貢獻(xiàn)。 上周,在Austin舉行的OpenStack Summit上,CoreOS發(fā)布Stackanetes,整合Kubernetes和OpenStack。 一個月前,Core...

    Hwg 評論0 收藏0
  • Python測試開發(fā)中Django和Flask框架的區(qū)別

    摘要:在談中框架和框架的區(qū)別之前,我們需要先探討如下幾個問題。通過大數(shù)據(jù)統(tǒng)計分析全球著名的網(wǎng)站對和這兩個框架的調(diào)查分析。從全球著名的代碼托管平臺上的和數(shù)量上分別為,分別為。 在談Python中Django框架和Flask框架的區(qū)別之前,我們需要先探討如下幾個問題。 一、為什么要使用框架? showImg(https://segmentfault.com/img/remote/14600000...

    B0B0 評論0 收藏0
  • Zookeeper學(xué)習(xí)系列【】Zookeeper 集群架構(gòu)、讀寫機(jī)制以及一致性原理(ZAB協(xié)議)

    摘要:協(xié)議是為分布式協(xié)調(diào)服務(wù)專門設(shè)計的一種支持崩潰恢復(fù)的一致性協(xié)議,這個機(jī)制保證了各個之間的同步。選主是協(xié)議中最為重要和復(fù)雜的過程。以實際效果而言,分區(qū)相當(dāng)于對通信的時限要求。參考官方文檔阿里巴巴為什么不用做服務(wù)發(fā)現(xiàn)定理的含義阮一峰 前言 同學(xué)們,在上一章中,我們主要講了Zookeeper兩種啟動模式以及具體如何搭建。本章內(nèi)容主要講的是集群相關(guān)的原理內(nèi)容,第一章可以當(dāng)做是Zookeeper原...

    Olivia 評論0 收藏0
  • Django前端頁面測試

    Django前端頁面測試 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; margin...

    IT那活兒 評論0 收藏1018

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<