项目结构

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 定义模型

# untitled/learning_logs/models.py
from django.db import models class Topic(models.Model):
"""A topic the user is learning about."""
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True) def __str__(self):
"""Return a string representation of the model."""
return self.text class Entry(models.Model):
"""Something specific learned about a topic."""
topic = models.ForeignKey('Topic', on_delete=models.CASCADE)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True) class Meta:
verbose_name_plural = 'entries' def __str__(self):
"""Return a string representation of the model."""
return self.text[:50] + "..."

2.2 激活模型

# untitled/untitled/settings.py
# ···
# Application definition INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles', # 我的应用程序
'learning_logs',
] # ···

2.3 创建数据库

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

2.4 Django管理网站

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

创建超级用户:

向管理网站注册模型:

# untitled/learning_logs/admin.py
from django.contrib import admin # Register your models here.
from learning_logs.models import Topic, Entry admin.site.register(Topic)
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映射到“学习笔记”的主页。

# untitled/untitled/urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url urlpatterns = [
path('admin/', admin.site.urls),
url(r'', include('learning_logs.urls', namespace='learning_logs'))
]
"""定义learning_logs的URL模式"""

# untitled/learning_logs/urls.py
from django.conf.urls import url from . import views app_name = 'learning_logs' urlpatterns = [
# 主页
url(r'^$', views.index, name='index'),
]

3.2 编写视图

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

3.3 编写模板

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

3.3.1 父模板

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

3.3.2 子模板

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

显示所有主题的页面

"""定义learning_logs的URL模式"""

# untitled/learning_logs/urls.py
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'),
]
# untitled/learning_logs/views.py

#···

def topics(request):
topics = Topic.objects.order_by('date_added')
context = {'topics' : topics}
return render(request, 'learning_logs/topics.html', context) # ···
<!-- untitled/templates/learning_logs/topics.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 %}

显示特定主题的页面

"""定义learning_logs的URL模式"""

# untitled/learning_logs/urls.py
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.topic, name='topic'),
]
# untitled/learning_logs/views.py

#···

def topic(request, topic_id):
"""Show a single topic, and all its entries."""
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) #···
<!-- untitled/templates/learning_logs/topic.html -->
{% 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 %}

参考资料:《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. 2017-2018-1 20155202 张旭 嵌入式C语言——时钟提取时分秒

    2017-2018-1 20155202 张旭 嵌入式C语言--时钟提取时分秒 任务要求: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案, ...

  2. mfc 进程的诞生和死亡

     进程概念  进程的诞生  进程的死亡 一. 进程: .简单的说 双击一个EXE图标时,系统就会产生一个相应的进程,分配相应的资源,并执行相应的代码. .标准一些的说法: 进程是一个具有独立功能 ...

  3. python 回溯法 子集树模板 系列 —— 8、图的遍历

    问题 一个图: A --> B A --> C B --> C B --> D B --> E C --> A C --> D D --> C E -- ...

  4. python 相对路径导入 与 绝对路径导入

    我的理解: 假设有一个文件夹 app 若 app 下有app/__init__.py文件,则此 app 被视作一个 package,而 app 下的其他文件/文件夹被视作 module 我们知道,pa ...

  5. C#集合与泛型集合

    看到这个标题,大家应该就知道有泛型集合,就有非泛型集合 既然都是集合,咱们今儿就简单的来对比讲解下 需要记住的不算太多,理解记忆.理解记忆 2017-11-0411:39:09 C# 泛型集合之非泛型 ...

  6. node基础-文件系统-文件写操作

    文件操作频率最高的就是读跟写.nodejs的文件的读取API在<node基础-文件系统-读取文件>里已经简单介绍过,本文就简单介绍下nodejs的文件写API. nodejs的文件操作均提 ...

  7. pandas 初识(三)

    Python Pandas 空值 pandas 判断指定列是否(全部)为NaN(空值) import pandas as pd import numpy as np df = pd.DataFrame ...

  8. Unity3d-通过简单示例来理解Time.deltaTime

    转载文章: Unity3d-通过简单示例来理解Time.deltaTime 2018年04月21日 18:04:14 Black_Window 阅读数:926 标签: UnityTime 更多 个人分 ...

  9. laravel从5.2到5.5从入门到精通视频教程共16套

    laravel从5.2到5.5从入门到精通视频教程共16套,大部分都是实战项目比如P2P.博客.短网址.知乎门户.app软件开发.微信商城实战等 课程目录: 01.Laravel框架从入门到精通02. ...

  10. Win10 + vs2017 编译并配置tesseract4.1.0

    tesseract 是一个开源的OCR (Optical Character Recognition , 光学字符识别) 引擎,本文就介绍一下自己在编译 tesseract4.1.0时遇到的一些坑,希 ...