• Python 项目实践三(Web应用程序) 第三篇


    接着上节的继续学习,现在要显示所有主题的页面

    有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页。所有主题页面显示用户创建的所有主题,它是第一个需要使用数据的网页。

    一 显示所有主题的页面

    1 URL模式

    #定义learning_logs的URL模式
    
    from django.conf.urls import url
    
    from . import views
    
    app_name='learning_logs'
    urlpatterns=[
        #主页
        url(r'^$',views.index,name='index'),
        #显示所有主题,
        url(r'^topics/$',views.topics,name='topics')
        ]
    

    2 视图

    函数topics()需要从数据库中获取一些数据,并将其发送给模板。我们需要在views.py中添加的代码如下:

    from django.shortcuts import render
    from .models import Topic
    
    # Create your views here.
    def index(request):
        '''学习笔记的主页'''
        return render(request,'learning_logs/index.html')
    
    def topics(request):
        topics = Topic.objects.order_by('date_added')
        context = {'topics': topics}
        return render(request, 'learning_logs/topics.html', context)
    

    3 模板

    显示所有主题的页面的模板接受字典context,以便能够使用topics()提供的数据。请创建一个文件,将其命名为topics.html,并存储到index.html所在的目录中。下面演示了如何在这个模板中显示主题:

    {% extends "learning_logs/base.html" %}
    {% block content %}
    <p>Topics</p>
    <ul>
      {% for topic in topics %}
        <li>{{ topic }}</li>
      {% empty %}
        <li>No topics have been added yet.</li>
     {% endfor %}
    </ul>
    {% endblock content %}
    

    打开这个link:http://127.0.0.1:8000/topics/

    二 显示特定主题的页面

    接下来,我们需要创建一个专注于特定主题的页面——显示该主题的名称及该主题的所有条目。同样,我们将定义一个新的URL模式,编写一个视图并创建一个模板。我们还将修改显示所有主题的网页,让每个项目列表项都是一个链接,单击它将显示相应主题的所有条目。

    1 URL模式

    显示特定主题的页面的URL模式与前面的所有URL模式都稍有不同,因为它将使用主题的id属性来指出请求的是哪个主题。例如,如果用户要查看主题Chess(其id为1)的详细页面,URL将为http://localhost:8000/topics/1/。下面是与这个URL匹配的模式,它包含在learning_logs/urls.py中:

    #定义learning_logs的URL模式
    
    from django.conf.urls import url
    
    from . import views
    
    app_name='learning_logs'
    urlpatterns=[
        #主页
        url(r'^$',views.index,name='index'),
        #显示所有主题,
        url(r'^topics/$',views.topics,name='topics'),
        #特定主题的详细页面
        url(r'^topics/(?P<topic_id>d+)',views.topics,name='topic')
        ]
    

    发现URL与这个模式匹配时,Django将调用视图函数topic(),并将存储在topic_id中的值作为实参传递给它。在这个函数中,我们将使用topic_id的值来获取相应的主题。

    2 视图

    函数topic()需要从数据库中获取指定的主题以及与之相关联的所有条目,如下所示:

    def topic(request,topic_id):
    	'''显示单个主题以及所有的条目'''
    	topic=Topic.objects.get(id=topic_id)
    	entries=topic.entry_set.order_by('-date_added')
    	context = {'topic':topic,'entries':entries}
    	return render(request, 'learning_logs/topic.html', context)
    

    3 模板

    这个模板需要显示主题的名称和条目的内容;如果当前主题不包含任何条目,我们还需向用户指出这一点:

    {% extends "learning_logs/base.html" %}
    {% block content %}
    
    <p>Topic: {{ topic }}</p>
    <p>Entries:</p>
    <ul>
    {% for entry in entries %}
      <li>
        <p>{{ entry.date_added|date:'M d, Y H:i' }}</p>
        <p>{{ entry.text|linebreaks }}</p>
      </li>
    {% empty %}
      <li>
      There are no entries for this topic yet.
      </li>
    {% endfor %}
    </ul>
    
    {% endblock content %}
    

    结果如下图:

    三 总结

    在本章中,我们首先学习了如何使用Django框架来创建Web应用程序。制定了简要的项目规范,在虚拟环境中安装了Django,创建了一个项目,并核实该项目已正确地创建。学习了如何创建应用程序,以及如何定义表示应用程序数据的模型。学习了数据库,以及在修改模型后,Django可为迁移数据库提供什么样的帮助。学习了如何创建可访问管理网站的超级用户,并使用管理网站输入了一些初始数据。还探索了Django shell,它让能够在终端会话中处理项目的数据。学习了如何定义URL、创建视图函数以及编写为网站创建网页的模板。最后,使用了模板继承,它可简化各个模板的结构,并使得修改网站更容易。

    四 展望

    在接下来的学习中,我们将创建对用户友好而直观的网页,让用户无需通过管理网站就能添加新的主题和条目,以及编辑既有的条目。我们还将添加一个用户注册系统,让用户能够创建账户和自己的学习笔记。让任意数量的用户都能与之交互,是Web应用程序的核心所在。

  • 相关阅读:
    python构造一个freebuf新闻发送脚本
    CISCO路由器练习
    python dns欺骗
    心脏滴血漏洞
    0CTF题中的神奇宝贝WP
    一套海量在线用户的移动端IM架构设计实践分享(含详细图文)(转)
    sendfile函数--零拷贝(转)
    浅谈分布式消息技术 Kafka(转)
    架构之微服务(zookeeper)转
    Zookeeper 3、Zookeeper工作原理(转)
  • 原文地址:https://www.cnblogs.com/ChinacloudTech/p/8195130.html
Copyright © 2020-2023  润新知