django 搭建一个投票类网站(二)

 

前一篇讲了建立一个工程和一个polls的应用程序,以及配置了数据库。css

这篇就继续讲吧html

1.django admin模块

  admin模块是django自带的模块,他让开发者能够不用管写任何代码的状况下就拥有了网站后台管理功能。不过有打开过界面的同窗应该注意到,不知道帐号密码,也没法进去一探究竟python

  咱们能够先用这个命令来建立网站超级管理员web

  python manage.py createsuperuser数据库

  而后就会让你按照指令输入用户用,email和两次密码,以后会说成功建立,而后在数据库的auth_user表中能清楚的看到这个帐号被添加在这里,密码呈现乱码,应该是被修改过了django

·  接着去启动这个服务,用python manage.py runserver打开web服务,浏览器

   在浏览器里打开http://127.0.0.1:8000/admin/,输入刚刚建立的帐号和密码,而后应该会出现这样的画面函数

  这些代码彻底不用你动手就能本身建立好,是否是很便利呢。并且相较于django1.11,django2.0作好了适应各类浏览器的自适应,应该是在css中添加了min-width的代码吧,不过在手机上也能自适应哦网站

2.可编辑admin模块

  咱们如今虽然已经有了管理员帐号,和后天管理系统。可是后台系统仍是没法对基本数据进行修改,也没有发布问卷的功能,接下来就作这些吧url

  打开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/5/
    path('<int:question_id>',views.detail, name='detail'),
    # ex:/polls/5/results/
    path('<int:question_id>/results',views.results, name='results'),
    # ex:/polls/5/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')[:5]
    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))

  而后从新启动服务,刷新网页去看看,就会变成下图这样

这篇就先讲到这,这个怎么实现的留在下一篇再说,休息会。。。。

相关文章
相关标签/搜索