django 搭建一个投票类网站(二)
前一篇讲了创建一个工程和一个polls的应用程序,以及配置了数据库。
这篇就继续讲吧
1.django admin模块
admin模块是django自带的模块,他让开发者可以不用管写任何代码的情况下就拥有了网站后台管理功能。不过有打开过界面的同学应该注意到,不知道账号密码,也无法进去一探究竟
我们可以先用这个命令来创建网站超级管理员
python manage.py createsuperuser
然后就会让你按照指令输入用户用,email和两次密码,之后会说成功创建,然后在数据库的auth_user表中能清楚的看到这个账号被添加在这里,密码呈现乱码,应该是被修改过了
· 接着去启动这个服务,用python manage.py runserver打开web服务,
在浏览器里打开http://127.0.0.1:8000/admin/,输入刚刚创建的账号和密码,然后应该会出现这样的画面
这些代码完全不用你动手就能自己创建好,是不是很便利呢。而且相较于django1.11,django2.0做好了适应各种浏览器的自适应,应该是在css中添加了min-width的代码吧,不过在手机上也能自适应哦
2.可编辑admin模块
我们现在虽然已经有了管理员账号,和后天管理系统。但是后台系统还是无法对基本数据进行修改,也没有发布问卷的功能,接下来就做这些吧
打开polls/admin.py文件,添加一下代码
from django.contrib import admin
from .models import Question admin.site.register(Question)
然后去刷新一下网页,我用的是pycharm,就会发现多了些东西
那个polls本来是没有的,现在多了,然后点击增加,进入以下界面,
上面那些数据是我自己填上去的,保存完之后会跳转到这里
然后还可以对他进行各式各样的操作。
经过上面这些操作,可以看到django帮我们做完了很多事,
自动生成网页表单
根据数据字段乐行自动生成HTML空间
数据增删改查功能
部分文本的本地化显示(中文显示)
3.添加视图
现在后台页面已经完成了,就差一个前台了,首先,我们需要这样四个页面
1。首页,展示最新的调查问卷
2。详细页面,具体的问卷展示页,可以投票
3。结果展示页,展示某问卷的结果
4。投票页面,处理某一次的投票
在django中每一个页面或者其他内容都是通过视图呈现出来的,每一个视图就是一python函数和方法。django通过url确定调用的视图,django的url相对于早期网站的url更加的简洁优雅
django通过URLconfs讲url模式的字符串与视图关联起来,URL模式字符串就是一个url的一半形式,如/newsarchive/<year>/<month>/
闲话少说,现在polls/view.py文件内添加一下视图
def detail(request,question_id):
return HttpResponse("正在为您打开问卷 %s。" % question_id) def results(request,question_id):
response = "正在查看问卷 %s 的结果"
return HttpResponse(response % question_id) def vote(request,question_id):
return HttpResponse("请为问卷 %s 提交您的答案。" % question_id)
修改polls.urls文件,添加以下URL映射
urlpatterns = [
# ex:/polls/
path('',views.index,name='index'),
# ex:/polls//
path('<int:question_id>',views.detail, name='detail'),
# ex:/polls//results/
path('<int:question_id>/results',views.results, name='results'),
# ex:/polls//vote
path('<int:question_id>/vote',views.vote, name='vote'),
]
重启web服务,注意,一定要重启,
然后输入http://127.0.0.1:8000/polls/3这个域名,会看到如下的页面
输入其他类似的域名会跳转到以下页面
这都是因为刚刚在url中配置了缘故
4.丰富视图功能
每一个视图都应该负责一个具体的业务逻辑,视图执行结束会返回一个包含页面内容的HttpResponse对象或者异常信息。
接下来修改index视图使他返回最新的五条调查问卷,在polls/views下修改代码
from .models import Question def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:]
output = ','.join([q.question_text for q in latest_question_list])
return HttpResponse(output)
然后返回127.0.0.1:8000/polls/这个页面,会看到,返回值变了
如上图可以看到我有两个问卷,返回值就是这两个,同理,有多个就会返回最近的五个
东西是显示出来了,但是样式有点丑,也没法改。想要增加要是的话只能在html文件里改。django是mtv的模式,我们只需要一个模板就好了。先去polls文件下创建一个新的文件下templats,在了目录清晰,在该文件夹下创建一个polls文件夹,接下来可以把html文件放里面了。我们先在这里创建一个index.html文件。
文件目录如下(贴一个总目录可以看看有没有什么区别)
在index.html文件里写入以下代码
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="/polls/{{question.id}}/">{{question.question_text }}</a> </li>
{% endfor %}
</ul>
{% else %}
<p>还没有调查问卷!</p>
{% endif %}
接着去修改polls/views中的index视图(为了以防万一我把四个导包的也引入进来,这里原本应该添加一个)
from django.shortcuts import render from django.http import HttpResponse from .models import Question from django.template import loader def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
tempalte = loader.get_template('polls/index.html')
context = {
'latest_question_list': latest_question_list,
}
return HttpResponse(tempalte.render(context,request))
然后重新启动服务,刷新网页去看看,就会变成下图这样
这篇就先讲到这,这个怎么实现的留在下一篇再说,休息会。。。。
django 搭建一个投票类网站(二)的更多相关文章
- django 搭建一个投票类网站(一)
写在最前,之前零零散散的看过django,但是由于比较杂,学的云里雾里的,所以就停了一段落,但是我最近找到了一个django的书,是李建编著的django入门与实践,于是,打算照着书上的步骤来写好一个 ...
- django 搭建一个投票类网站(四)
昨天我把投票页面终于写完,怎么说呢,觉得这本书对我的帮助也不是很大,然后去看了下django的文档,发现竟然是同一个项目...... 但还是要善始善终吧,贴一下中文版的文档https://docs.d ...
- django 搭建一个投票类网站(三)
之前修改index的视图的代码,工作原理是先试用loader方法加载视图,然后HTTPResponse方法初始化一个HTTPResponse对象并返回给浏览器.对于很多django视图来说,他们的工作 ...
- 初学django搭建一个通讯录应用
---恢复内容开始--- django搭建一个通讯录应用 一.环境介绍 window10 64位 Django-1.5.12 python 2.7 Sqlite3 二.基本安装 python2.7安装 ...
- 利用django创建一个投票网站(三)
创建你的第一个 Django 项目, 第三部分 这一篇从第二部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,并且聚焦于如何创建公用界面--也被称为"视图". 设计哲学 Dj ...
- 利用django创建一个投票网站(五)
创建你的第一个 Django 项目, 第五部分 这一篇从第四部分(en)结尾的地方继续讲起.我们在前几章成功的构建了一个在线投票应用,在这一部分里我们将其创建一些自动化测试. 自动化测试简介 自动化测 ...
- 利用django创建一个投票网站(四)
创建你的第一个 Django 项目, 第四部分 这一篇从第三部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,专注于简单的表单处理并且精简我们的代码. 编写一个简单的表单 让我们更新一下在上一个 ...
- 利用django创建一个投票网站(一)
这是教程的原始链接:http://django-intro-zh.readthedocs.io/zh_CN/latest/part1/ 创建你的第一个 Django 项目, 第一部分 来跟着实际项目学 ...
- .net core 2.0学习记录(一):搭建一个.Net Core网站项目
.Net Core开发可以使用Visual Studio 2017或者Visual Studio Code,下面使用Visual Studio 2017搭建一个.net Core MVC网站项目. 一 ...
随机推荐
- 如何选择JavaScript构建工具之Babel、Browserify、Webpack、Grunt以及Gulp
当我们开始一个新的 JavaScript 项目时,我们需要考虑的第一件事就是搭建一个前端编译环境.但是在面对众多的 JavaScript 构建工具时,我们却无所适从,不知道究竟哪一个才是最适合我们的. ...
- 阿里云搭建k8s高可用集群(1.17.3)
首先准备5台centos7 ecs实例最低要求2c4G 开启SLB(私网) 这里我们采用堆叠拓扑的方式构建高可用集群,因为k8s 集群etcd采用了raft算法保证集群一致性,所以高可用必须保证至少3 ...
- 转: Laravel的数据库迁移 介绍的比较清晰
原文: https://blog.sbot.io/articles/12/Laravel-数据库迁移(Database-Migrations)操作实例 很多人可能在学习Laravel框架的时候,对La ...
- SURF特征检测
SERF(speed up robust feature )特征的关键特性: 特征检测 尺度空间:缩放到不同的大小或分辨率仍能检测 选择不变性:光照不变,旋转不变 特征向量:描述为一个特征向量 DDN ...
- MySQL int、char、varchar 最大值是多少?
1.int(len) (1)max(len) = 255 (2)存储范围: 带符号整数:-2147483648-2147483647. 无符号(unsigned)整数:0-4294967295. 2. ...
- qt creator源码全方面分析(1)
目录介绍 首先我们对软件源代码根目录下的各个重要文件(夹)做一个简单的介绍,对整体有一个大概的了解. 下面对目录及其内容做一个大概的初步的介绍,后面我尽量按照目录顺序进行依次介绍,当然可能会有一些交叉 ...
- Wannafly Camp 2020 Day 3F 社团管理 - 决策单调性dp,整体二分
有 \(n\) 个数构成的序列 \({a_i}\),要将它划分为 \(k\) 段,定义每一段的权值为这段中 \((i,j) \ s.t. \ i<j,\ a_i=a_j\) 的个数,求一种划分方 ...
- 中文 json_encode之后字符长度问题
问题描述: 将某个字符串$str 进行json编码,即json_encode($str)后变成Unicode字符存入数据库,会发现中文的长度明明没有超过设置的字符长度最大值,但是却抛出字段长度过长错误 ...
- unrecognized import path "golang.org/x/*"的解决办法
由于国内网络原因,因此访问https://golang.org/网站会被限制.所以在go get下载其他第三方包的时候,如果这个第三方包又引用了https://golang.org/x/下的包,通常会 ...
- LaTeX技巧009:中国象棋的LaTeX排版
Latex可以排版容易排版中国象棋, 围棋, 国际象棋棋谱和乐谱, 详情请见. http://bbs.chinatex.org/forum.php?mod=viewthread&tid=498 ...