项目结构

1.建立项目

File -->> New Project...



第一个Location是项目所在的目录,第二个Location是项目独立的Python运行环境,我们称之为Virtualenv

Base interpreter是Python安装目录下的python.exe

刚创建的Django项目如下所示:

Terminal窗口输入命令python manage.py runserver也可以启动项目。

在浏览器中访问http://127.0.0.1:8000/,看到下面这个页面表明项目到目前为止一切正常。

2.创建应用程序

Django项目由一系列应用程序组成,它们协同工作,让项目成为一个整体。

实际上,PyCharmTerminal窗口已经处于Django项目独立的运行环境,执行python manage.py startapp learning_logs命令创建一个应用程序:

创建完应用程序后,就可以在项目中看到新增的应用程序的目录。

2.1 定义模型

  1. # untitled/learning_logs/models.py
  2. from django.db import models
  3. class Topic(models.Model):
  4. """A topic the user is learning about."""
  5. text = models.CharField(max_length=200)
  6. date_added = models.DateTimeField(auto_now_add=True)
  7. def __str__(self):
  8. """Return a string representation of the model."""
  9. return self.text
  10. class Entry(models.Model):
  11. """Something specific learned about a topic."""
  12. topic = models.ForeignKey('Topic', on_delete=models.CASCADE)
  13. text = models.TextField()
  14. date_added = models.DateTimeField(auto_now_add=True)
  15. class Meta:
  16. verbose_name_plural = 'entries'
  17. def __str__(self):
  18. """Return a string representation of the model."""
  19. return self.text[:50] + "..."

2.2 激活模型

  1. # untitled/untitled/settings.py
  2. # ···
  3. # Application definition
  4. INSTALLED_APPS = [
  5. 'django.contrib.admin',
  6. 'django.contrib.auth',
  7. 'django.contrib.contenttypes',
  8. 'django.contrib.sessions',
  9. 'django.contrib.messages',
  10. 'django.contrib.staticfiles',
  11. # 我的应用程序
  12. 'learning_logs',
  13. ]
  14. # ···

2.3 创建数据库

接着,先后执行命令python manage.py makemigrations learning_logspython manage.py migrate,前者生成一个文件0001_initial.py告诉Django如何修改数据库,后者就让Django修改数据库了。

2.4 Django管理网站

为应用程序定义模型时,Django提供的管理网站让你能够轻松地处理模型。

创建超级用户:

向管理网站注册模型:

  1. # untitled/learning_logs/admin.py
  2. from django.contrib import admin
  3. # Register your models here.
  4. from learning_logs.models import Topic, Entry
  5. admin.site.register(Topic)
  6. admin.site.register(Entry)

使用超级用户访问管理网站http://127.0.0.1:8000/admin/

我们可以在管理网站管理模型的数据:

2.5 Django shell

输入一些数据后,就可通过交互式终端会话以编程方式查看这些数据了。这种交互式环境称为Django shell,是测试项目和排除其故障的理想之地。

3.创建网页

使用Django创建网页的过程通常分三个阶段:定义URL、编写视图和编写模板。

每个URL都被映射到特定的视图——视图函数获取并处理网页所需的数据。视图函数通常调用一个模板,后者生成浏览器能够理解的网页。

3.1 映射URL

http://127.0.0.1:8000/默认返回Django网站,我们修改这一点,将这个URL映射到“学习笔记”的主页。

  1. # untitled/untitled/urls.py
  2. from django.contrib import admin
  3. from django.urls import path
  4. from django.conf.urls import include, url
  5. urlpatterns = [
  6. path('admin/', admin.site.urls),
  7. url(r'', include('learning_logs.urls', namespace='learning_logs'))
  8. ]
  1. """定义learning_logs的URL模式"""
  2. # untitled/learning_logs/urls.py
  3. from django.conf.urls import url
  4. from . import views
  5. app_name = 'learning_logs'
  6. urlpatterns = [
  7. # 主页
  8. url(r'^$', views.index, name='index'),
  9. ]

3.2 编写视图

  1. # untitled/learning_logs/views.py
  2. from django.shortcuts import render
  3. # Create your views here.
  4. def index(request):
  5. """学习笔记的主页"""
  6. return render(request, 'learning_logs/index.html')

3.3 编写模板

  1. <!-- untitled/templates/learning_logs/index.html -->
  2. <p>Learning Log</p>
  3. <p>Learning Log helps you keep track of your learning, for my topic you're learning about.</p>

3.3.1 父模板

  1. <!-- untitled/templates/learning_logs/base.html -->
  2. <p>
  3. <a href="{% url 'learning_logs:index' %}">Learning Log</a>
  4. </p>
  5. {% block content %}{% endblock %}

3.3.2 子模板

  1. <!-- untitled/templates/learning_logs/index.html -->
  2. {% extends "learning_logs/base.html" %}
  3. {% block content %}
  4. <p>Learning Log helps you keep track of your learning, for any topic you're
  5. learning about.</p>
  6. {% endblock content %}

显示所有主题的页面

  1. """定义learning_logs的URL模式"""
  2. # untitled/learning_logs/urls.py
  3. from django.conf.urls import url
  4. from . import views
  5. app_name = 'learning_logs'
  6. urlpatterns = [
  7. # 主页
  8. url(r'^$', views.index, name='index'),
  9. url(r'^topics/$', views.topics, name='topics'),
  10. ]
  1. # untitled/learning_logs/views.py
  2. #···
  3. def topics(request):
  4. topics = Topic.objects.order_by('date_added')
  5. context = {'topics' : topics}
  6. return render(request, 'learning_logs/topics.html', context)
  7. # ···
  1. <!-- untitled/templates/learning_logs/topics.html -->
  2. {% extends "learning_logs/base.html" %}
  3. {% block content %}
  4. <p>Topics</p>
  5. <ul>
  6. {% for topic in topics %}
  7. <li>{{ topic }}</li>
  8. {% empty %}
  9. <li>No topics have been added yet.</li>
  10. {% endfor %}
  11. </ul>
  12. {% endblock content %}

显示特定主题的页面

  1. """定义learning_logs的URL模式"""
  2. # untitled/learning_logs/urls.py
  3. from django.conf.urls import url
  4. from . import views
  5. app_name = 'learning_logs'
  6. urlpatterns = [
  7. # 主页
  8. url(r'^$', views.index, name='index'),
  9. url(r'^topics/$', views.topics, name='topics'),
  10. url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),
  11. ]
  1. # untitled/learning_logs/views.py
  2. #···
  3. def topic(request, topic_id):
  4. """Show a single topic, and all its entries."""
  5. topic = Topic.objects.get(id=topic_id)
  6. entries = topic.entry_set.order_by('-date_added')
  7. context = {'topic': topic, 'entries': entries}
  8. return render(request, 'learning_logs/topic.html', context)
  9. #···
  1. <!-- untitled/templates/learning_logs/topic.html -->
  2. {% extends 'learning_logs/base.html' %}
  3. {% block content %}
  4. <p>Topic: {{ topic }}</p>
  5. <p>Entries:</p>
  6. <ul>
  7. {% for entry in entries %}
  8. <li>
  9. <p>{{ entry.date_added|date:'M d, Y H:i' }}</p>
  10. <p>{{ entry.text|linebreaks }}</p>
  11. </li>
  12. {% empty %}
  13. <li>
  14. There are no entries for this topic yet.
  15. </li>
  16. {% endfor %}
  17. </ul>
  18. {% endblock content %}

参考资料:《Python编程从入门到实践》—【美】Eric Matthes 著

Django入门项目实践(上)的更多相关文章

  1. Django入门项目实践(下)

    5.设置应用程序的样式 安装django-bootstrap3. # untitled/untitled/settings.py # ··· INSTALLED_APPS = [ 'django.co ...

  2. Django入门项目实践(中)

    4.用户账户 4.1 让用户能够输入数据 添加新主题 # untitled/learning_logs/forms.py from django import forms from .models i ...

  3. Django入门与实践 17-26章总结

    Django入门与实践-第17章:保护视图 Django 有一个内置的视图装饰器 来避免它被未登录的用户访问: 现在如果用户没有登录,将被重定向到登录页面: 现在尝试登录,登录成功后,应用程序会跳转到 ...

  4. Django 入门项目案例开发(上)

    关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. Django 入门案例开发(中) http://www.cnblogs.com/focusBI ...

  5. Django入门与实践

    安装: 1.https://www.djangoproject.com/查找最新版本 2.pip install Django==1.10.6安装Django   创建项目: 1.打开命令行,进入想要 ...

  6. django入门与实践(开)

    1.什么是Django? 基于python的高级web开发框架 高效 快速 免费 开源 正常上网流程 浏览器浏览网页的基本原理 请求响应过程 开发环境搭建 Python Django pip inst ...

  7. Django入门与实践-第13章:表单处理(完结)

    http://127.0.0.1:8000/boards/1/ http://127.0.0.1:8000/boards/2/ http://127.0.0.1:8000/boards/3/ http ...

  8. Django入门与实践 1-16章总结

    注意事项:随时备份.随时记录.从宏观到微观 不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之:学至于行之止矣 安装 Python 3.6.2 pip install django==1.11.4 ...

  9. Django入门与实践-第26章:个性化工具(完结)

    http://127.0.0.1:8000/boards/1/topics/62/reply/ 我觉得只添加内置的个性化(humanize)包就会很不错. 它包含一组为数据添加“人性化(human t ...

随机推荐

  1. MySQL默认INFORMATION_SCHEMA,MySQL,TEST三个数据库用途(转)

    本文简要说明了MySQL数据库安装好后自带的INFORMATION_SCHEMA,MySQL,TEST三个数据库的用途. 第一个数据库INFORMATION_SCHEMA:提供了访问数据库元数据的方式 ...

  2. Dynamics CRM2016 导入数据格式之xlsx的应用

    在CRM中导入数据中新增加了一个xlsx格式,这个在之前的版本(2013中没有,2015不清楚是否有)中是没有的 本篇的目的就是为了提醒各位,不要把这个格式和csv的导入功能混淆,因为xlsx格式的用 ...

  3. C语言学习之结构体

    前言 一直以来,C语言的学习都在入门阶段,只用到数组.函数.循环.选择.位运算这些基本的知识,较少用到指针.预处理.结构体.枚举类型.文件操作等这些C语言的精髓内容,现在想想真不敢说自己熟练掌握C语言 ...

  4. ElasticSearch查询 第二篇:文档更新

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  5. Linux内核分析——第一章 Linux内核简介

    第一章   Linux内核简介 一.Unix的历史 1.Unix系统成为一个强大.健壮和稳定的操作系统的根本原因: (1)简洁 (2)在Unix中,很多东西都被当做文件对待.这种抽象使对数据和对设备的 ...

  6. Linux内核实验作业四

    实验作业:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 20135313吴子怡.北京电子科技学院 [第一部分]使用库函数API来获取用户标识号.库函数为getuid() 代码如下: ...

  7. 用IDEA开发简单的Servlet

    最近学习java,主要是servlet相关的内容.IDEA和servlet之前都没有碰过,所以做了一下小实验,走了一些弯路:这里把一个完整的步骤写出来,加深一下印象. IDEA创建项目步骤 1. 在i ...

  8. OpenFlow 1.3 控制器与交换机的交互,以及拓扑发现

    前言 最近纠结于控制器如何发现拓扑,于是就翻起了OpenFlow 1.3进行查看,以及一些相关协议 OF 1.3 安全通道,即交互消息 OpenFlow Switch Specification 1. ...

  9. Dummy Sample

    转载至:http://www.bubuko.com/infodetail-2495860.html :https://www.cnblogs.com/richered/p/8417378.html

  10. 基于 Redis 做分布式锁

    基于 REDIS 的 SETNX().EXPIRE() 方法做分布式锁 setnx() setnx 的含义就是 SET if Not Exists,其主要有两个参数 setnx(key, value) ...