前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于Django1.11和Python3

基于Django1.11和Python3

作者头像
py3study
发布于 2020-01-03 03:08:10
发布于 2020-01-03 03:08:10
50600
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

一、创建一个VotingSystem项目以及polls应用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ django-admin.py startproject VotingSystem
$ cd VotingSystem
$ python3 manage.py startapp polls

注:如果使用Pycharm来创建的话,以上两步都可以省略

二、配置tempaltes路径(如果没有)

a. 先在VotingSystem项目目录下新建一个templates文件夹,注意文件夹权限和属组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo mkdir templates

b. 然后再setting.py文件中添加路径

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ...
    },
]

三、将应用名称添加到setting.py文件INSTALLED_APPS选项末尾(如果没有)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSTALLED_APPS = [
...
'polls',
]

注:以上两步如果用Pycharm都可以一步到位

四、编辑polls/model.py,创建数据库模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import models

# 问题
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    
   # 双引号中定义的是在admin页面显示的verbose_name
    pub_date = models.DateTimeField("date published")  
    
    def __str__(self):
        return self.question_text

# 问题选项
class Choice(models.Model):
    question = models.ForeignKey("Question")
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    
    def __str__(self):
        return self.choice_text

五、同步数据库,生成数据库表(这里使用的是默认的sqlite3)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python3 manage.py makemigrations
$ python3 manage.py migrate

六、生成admin管理账户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python3 manage.py createsuperuser

七、将model注册到admin中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.contrib import admin
from .models import *

class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 3  # 在admin页面显示额外三个空白表单

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline,]  # 在admin页面显示内联
    list_display = ('question_text', 'pub_date')

admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

八、启动server,进入admin页面,创建一些问题和选项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python3 manage.py runserver

九、编辑VotingSystem/urls.py,使用路由分发和命名空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^polls/', include("polls.urls", namespace="polls")),
]

十、编辑polls/urls.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.conf.urls import url
from polls import views

urlpatterns = [
    url(r'^$', views.index, name="index"),
    url(r'^(?P<question_id>[0-9]+)/$', views.detail, name="detail"),
    url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name="results"),
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name="vote"),
]

十一、编辑polls/views.py视图文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.shortcuts import render, get_object_or_404, HttpResponseRedirect, reverse, redirect
from .models import *

# 首页,展示所有问题
def index(req):
    lastest_question_list = Question.objects.all()
    return render(req, "polls/index.html", locals())

# 展示单个问题的所有选项
def detail(req, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(req, "polls/detail.html", locals())

# 查看投票结果,   
def results(req, question_id):    
    question = get_object_or_404(Question, pk=question_id)    
    return render(req, "polls/results.html", locals())    
   

# 选择投票,设置cookie验证
def vote(req, question_id):    
    p = get_object_or_404(Question, pk=question_id)    
    if req.COOKIES.get("is_vote", None):    
        return render(req, "polls/detail.html", {"question": p, "error_message": "你已经投过票了!"})    
    try:    
        selected_choice = p.choice_set.get(pk=req.POST['choice'])    
    except (KeyError, Choice.DoesNotExist):    
        return render(req, "polls/detail.html", {"question": p, "error_message": "You did't select a choice"})    
    else:    
        selected_choice.votes += 1    
        selected_choice.save()    
        rep = redirect(reverse("polls:results", args=(p.id,)))    
        rep.set_cookie("is_vote", True)    
        return rep

十二、在templates目录下创建polls目录,在polls目录下创建index.html detail.html results.html三个HTML文件

index.html:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% if lastest_question_list %}
    <ul>
        {% for question in lastest_question_list %}
            <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
        {% endfor %}
    </ul>
{% else %}
    <p>No polls are avaiable.</p>
{% endif %}
</body>
</html>

detail.html:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<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="提交"/>
</form>
</body>
</html>

results.html:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!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_text }} --> {{ choice.votes }} vote{{ choice.votes|pluralize }}
        </li>
    {% endfor %}
</ul>
<a href="{% url 'polls:detail' question.id %}">再次投票</a>
<a href="{% url 'polls:index' %}">返回首页</a>
</body>
</html>

十三、至此我们所有配置都已经配置完毕了,马上运行server,进行访问吧

http://127.0.0.1:8000/polls/

十四、githup源码地址: https://github.com/daibaiyang119/VotingSystem

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
Java自动化测试框架-06 - 来给你的测试报告化个妆整个形 - (下)(详细教程)
经过上一次的化妆和整形,有客户提出需求能不能将那个普通会员的套餐再升级一下,再漂亮一点。所以这次咱们就来看看从哪里下刀可以使它变得再漂亮一点点。
北京-宏哥
2019/11/06
5520
Java自动化测试框架-06 - 来给你的测试报告化个妆整个形 - (下)(详细教程)
jquery 常用方法总结
jQuery顶级对象 缩写$    window.jQuery   window.$
用户1503405
2021/09/23
1.7K0
JavaScript CSS Style属性对照表「建议收藏」
为了达到某种特殊的效果我们需要用Javascript动态的去更改某一个标签的Css属性。比如:鼠标经过一个图片时我们让图片加一个边框,代码可能是这样:
全栈程序员站长
2022/08/29
5380
【HarmonyOS Next】鸿蒙应用弹框和提示气泡详解(二)之浮层(OverlayManager),半模态页面(bindSheet),全模态页面
上期围绕 HarmonyOS Next 最新API趋势,介绍了鸿蒙应用中最新的自定义弹框和提示气泡的使用。
GeorgeGcs
2025/03/26
1240
【HarmonyOS Next】鸿蒙应用弹框和提示气泡详解(二)之浮层(OverlayManager),半模态页面(bindSheet),全模态页面
SSM框架整合项目 :租房管理系统
 使用ssm框架整合,oracle数据库 框架: Spring SpringMVC MyBatis 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fast
二十三年蝉
2018/02/28
2.5K0
SSM框架整合项目 :租房管理系统
EMLOG自适应emMsg提示信息
原版的EMLOG 提示有点丑。 正好看到一个不错的提示页面就给弄了下来,替换上 打开 include/lib/function.base.php 找到 /** * 显示系统信息 *
Youngxj
2018/06/06
9090
【架构师(第二十四篇)】编辑器开发之添加模版到画布
新添加了两个类型,这里推荐一个 vscode 插件,vscode-code-to-type ,复制 js 对象,生成 ts 类型,非常的好用。
一尾流莺
2022/12/10
2700
【架构师(第二十四篇)】编辑器开发之添加模版到画布
分享基于 websocket 网页端聊天室
有一个月没有写博客了,也是因为年前需求多、回家过春节的原因,现在返回北京的第二天,想想,应该也要分享技术专题的博客了!!
Krry
2019/02/18
1.6K0
自制在线富文本编辑器,精简完整版
 不需要插入图片功能的去掉php代码然后将.php文件改为.html即可变成本地文本编辑器,是不是很酷!当然功能跟world比没那么强大!
超级小可爱
2023/02/17
1.9K0
自制在线富文本编辑器,精简完整版
其乐后台管理系统(四)--门店管理模块
前言:在此之前,我们讲解了-----本项目(Spring+SpringMVC+Mybatis)三大框架的整合及测试 ,对三大框架的整合有了一今天定的了解,那么今天给大家讲的是门店管理模块的实现,主要以前后端两个模块进行讲解,如若其中你有什么问题,可以留言告知!
不会飞的小鸟
2020/03/21
8540
鸿蒙-元服务-坚果派-第四章 基础控件
2、引用Resource资源,资源路径为【/resources/base/element/string.json】
红目香薰
2025/02/20
760
鸿蒙-元服务-坚果派-第四章 基础控件
JavaScript中style属性对照表
盒子标签和属性对照 CSS语法 (不区分大小写) JavaScript语法 (区分大小写) border border border-bottom borderBottom border-bottom-color borderBottomColor
奶糖味的代言
2018/04/16
7740
Ajax-数据异步交互1.Ajax简介2.AJAX 实例
AJAX = 异步 JavaScript 和 XML。 AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
Python攻城狮
2018/08/23
1.8K0
Ajax-数据异步交互1.Ajax简介2.AJAX 实例
HarmonyOS Next 悬浮窗拖拽和吸附动画
本示例使用position绝对定位实现应用内悬浮窗,并且通过animateTo结合curves动画曲线实现悬浮窗拖拽跟手和松手吸附边缘的弹性动画效果。
小帅聊鸿蒙
2024/09/13
1780
HarmonyOS Next 悬浮窗拖拽和吸附动画
QQ聊天插件,鼠标划入划出显示隐藏效果。
其中遇到了 mouse 事件的问题,可以参照:JQuery几个mouse事件的区别和用法
德顺
2019/11/13
1.3K0
QQ聊天插件,鼠标划入划出显示隐藏效果。
商城项目整理(四)JDBC+富文本编辑器实现商品增加,样式设置,和修改
UEditor富文本编辑器:http://ueditor.baidu.com/website/ 相应页面展示: 商品添加: 商品修改: 前台商品展示: 商品表建表语句: 1 create table
二十三年蝉
2018/02/28
2.6K0
商城项目整理(四)JDBC+富文本编辑器实现商品增加,样式设置,和修改
jquery顶部固定层下拉导航
最近有人在论坛里讨论怎么制作导航菜单!我关注了一下,这里就写了一个简单的demo。供大家参考。代码如下:
业余草
2019/01/21
4.1K0
jquery顶部固定层下拉导航
css实现一款漂亮的查询框
上面展示的是实现后的效果,实现的主要在css控制,再次,添加了text的获得焦点和失去焦点的事件,下面是详细代码:
牛老师讲GIS
2018/10/23
1.3K0
css实现一款漂亮的查询框
Flutter第3天--基础控件(上)
Flutter七日游第三天:2018-12-18 天气:晴朗 零、前言 浪了两天,Dart语法基本上熟悉了,绘图也不怕了,现在进入正轨,继续浪~ 今天来学些枯燥的东西了--基础控件,戒骄戒躁,基础还是要好好掌握。 本文目的在于尽可能看清控件的全局(细枝末节点到为止),详细用法等布局实战再细说吧 本文能用图的,尽量不用字(看完你可能会觉得我脑洞有点大),废话不多说,进入今天的内容 ---- 一、Widget简入 Widget:[小器具,装饰品,窗口小部件],以后简称:控件 下面看一下Widg
张风捷特烈
2018/12/27
3K0
22.jQuery(实例)
1.开关灯效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .hide{ display: none; } </style> </head> <body> <input id="i1" type="button" value="开关" /> <div class="c
zhang_derek
2018/04/11
1.7K0
相关推荐
Java自动化测试框架-06 - 来给你的测试报告化个妆整个形 - (下)(详细教程)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档