写下你的第一个Django应用
第一部分
让我们通过例子来学习.
在本教程中,我们将引导您完成基本投票应用程序的创建.
其中包括两部分:
- 一个让人们查看民意调查并投票的公共网站.
- 允许您添加,更改和删除民意调查的管理网站.
我们假设你django已经安装好了,你可以通过下面的shell命令得知django的版本:
python -m django --version
如果django已经安装好了,你可以看到安装的版本.如果没有,你会得到错误提示"No module named django".
这个教程基于django2.0,支持python3.4以及后面的版本.如果django的版本不匹配,可以在右下角选择合适的版本,或者升级django版本.如果你正在使用老版本的python,你可以根据下图去找到合适的点击django版本.
创建一个项目
如果这是你第一次使用django,你会关心一些初始化设置.换句话说,你需要下面的指令自动生成一个django项目,其中包含数据库配置,django特定的选项和应用特定的选项.
从命令行,cd进入你想创建django项目的文件夹,然后执行下面的指令:
django-admin startproject mysite
这条命令将会在你的文件夹中创建一个mysite文件夹.
注释:
你需要避免在创建django项目与python或django内置组件相同,尤其是,你应该避免使用django(与django本身发生冲突)或者test(与python内置文件冲突).
代码应该放置在哪?
如果你的背景是普通的旧PHP(没有使用现代框架),那么你可能习惯于把代码放在Web服务器的文档根目录下(比如/ var / www).用Django,你不这样做.将任何Python代码放入Web服务器的文档根目录中并不是一个好主意,因为它有可能让人们能够通过Web查看您的代码.这样安全性不好.
将代码放在文档根目录之外的某个目录中,例如/ home / mycode.
让我们看看startproject这个指令都创建了什么:
mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py下面解释这些文件:
- 外部的mysite/是你项目的容器.它的名字不影响django;你可以随你喜欢地修改名字
- manage.py:一个代码管理工具,可以让你用各种方式与django进行交互.你可以读到关于manage.py的所有功能在
- 内部的mysite/是你django项目的实际文件夹.它的名字是你需要用来导入任何内容的Python包名(例如:mysite.urls)
- mysite/__init__.py:一个空的文件用来告诉python,这个文件夹是一个python包.如果你是一个python初学者,建议你先了解一下python包的含义
- mysite/setting.py:用于配置django的设置.通过可以了解到settings的工作方式
- mysite/urls.py:django项目的url管理器,可以设置你django项目可以访问的网页url.通过可以了解更多关于URLS
- mysite/wsgi.py:WSGI兼容的Web服务器为您的项目提供服务的入口点
---------------------------------------------------------------------------------------------------------------------
开发服务器
让我们检验我的django项目.进入外部mysite目录,运行下面的指令:
python manage.py runserver
你可以看到下面的命令行输出
Performing system checks...System check identified no issues (0 silenced).You have unapplied migrations; your app may not work properly until they are applied.Run 'python manage.py migrate' to apply them.April 11, 2018 - 19:22:09Django version 2.0.4, using settings 'blogproject.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CONTROL-C.
注释:
现在请忽略数据库迁移的问题,这个问题会在稍后进行处理.
你已经开始使用django开发服务器了,这是一个纯粹用Python编写的轻量级Web服务器.这些功能我们已经在django中包含了,所以你可以很快地进行开发,你可以直接进行开发,不需要去配置生产服务器,比如像Apache这样的网页服务器.
注意注意!不要在类似于生产环境的任何情况下使用此服务器。它仅用于开发时使用。 (我们的业务是制作Web框架,而不是Web服务器。)
现在服务器正在运行,可以通过来访问你的网页,你可以看到"The install worked successfully! Congratulations!",还有一个起飞的火箭,说明它正在工作.
切换端口:
runserver这个命令默认会以8000作为端口号开启服务器.
如果你想要改变服务器的端口号,将它作为命令的参数输入.下面是个例子,这个命令开启服务器在8080端口上:
python manager.py runserver 8080
你如果你想改变服务器的IP地址,将ip地址与端口号一起作为参数传递即可,如果出现错误,如下
Invalid HTTP_HOST header: '127.1.1.1:8080'. You may need to add '127.1.1.1' to ALLOWED_HOSTS.
说明你需要把该IP加入setting.py文件中ALLOWED_HOSTS中即可.
如果你想收听所有可用的公共IP(如果你正在运行Vagrant或希望在网络上的其他计算机上炫耀你的工作,这很有用),请使用:
python manage.py runserver 0:80000是 0.0.0.0的简称. 有关开发服务器的完整文档可以在参考中找到。
自动重新加载服务器:
您无需重新启动服务器以使代码更改生效。但是,某些操作(如添加文件)不会触发重新启动,因此在这种情况下您必须重新启动服务.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
创建一个Polls应用:
现在你的服务器环境已经搭建好了,你可以开始工作了.
你在django中编写的每一个应用都遵循特定的python包. django带有一个实用的工具可以自动生成应用的基本目录结构,所有你可以把注意力放在写代码上而不是创建文件目录.
项目对比应用:
项目和应用的不用是什么呢?应用是网页应用程序,它可以执行一些操作,比如公共记录数据库或者简单的投票系统.项目是一个特定网页配置和网页应用程序的集合,一个项目可以包含多个应用,一个应用可以在多个项目中.
你的所有应用可以在你python路径上的任何地方.在本教程中,我们会创建Poll应用与manage.py文件同一个路径下,所以它可以被直接作为主模块被调用,而不是作为mysite的子模块.
创建你的应用,确认你已经进入了与manage.py同目录下,然后执行下面的目录:
python manage.py startapp polls
这个命令创建了polls文件夹, 其中目录像下面这样:
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py这个文件夹将包含我们的投票系统应用.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
编写你的第一个视图:
让我们编写第一个视图.打开polls/views.py这个文件然后将下面的python代码写入:
polls/views.py中
from django.http import HttpResponsedef index(request): return HttpResponse("Hello, world. You're at the polls index.")
这是可能是django中最简单的视图了.要调用这个视图,我们需要将它映射到一个URL - 为此我们需要一个URLconf.
需要创建一个URLconf在polls文件夹中.创建一个文件叫做urls.py.你的文件夹现在应该是这样:
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py urls.py views.py
在polls/urls.py文件中加入下面的代码:
polls/urls.py文件中
from django.urls import pathfrom . import viewsurlpatterns = [ path('',views.index, name='index'),]
下一步是将根的URLconf指向polls.urls模块.在mysite/urls.py添加导入django.urls.include然后在urlpatterns列表中添加一个include(),以便导入polls.urls模块:
mysite/urls.py文件中
from django.contrib import adminfrom django.urls import path,includeurlpatterns = [ path('admin/', admin.site.urls), path('polls/',include('polls.urls')),]
include()函数允许访问其他的URLconf.任何时候django碰到include()函数,它会暂停在这个URL在当前URLconf中的匹配,转而进入include函数中的URLconfs中找寻匹配.
include()函数的主要想法是让引用URLs更加方便.因为投票是在自己的URLconf中(polls/urls.py),他们可以被放置在"/polls/"之下,或者"/fun_polls/"之下,或者"/content/polls/"之下,或者其他根目录之下,这个应用都可以工作.
什么时候使用include()函数?
你应该总是使用 include()函数当你要添加其他URL模型时. admin.site.urls 是唯一一个不可以使用的例外.你现在已经将一个视图连接到URLconf了,现在验证它是否工作,运行下面的指令:
python manage.py runserver
通过浏览器访问,然后你应该可以看到"Hello, world. You’re at the polls index.",这些是你在index中写下的.
path()函数会传递四个参数,其中两个是必须的:路径(route)和视图(view),两个可以可选属性:kwargs和名字(name).我们需要回顾一下这四个参数.
路径(route)
路径是一个字符串,包含了URL模型.处理请求时,django从urlpattens第一个URL开始往下,匹配请求的URL,直到找到一个匹配的URL.
视图(view)
当django找到匹配的URL模式,它将HttpRequest对象作为第一个参数并将路由中的任何“捕获”值作为关键字参数调用指定的视图函数.我们将稍微举一个例子.
kwargs
关键字参数可以在字典中传递给目标视图,我们不打算在教程中使用Django的这个特性。名字(name)
命名你的URL可以让你从django其他地方明确地引用它,特别是在模板中.这个强大的功能允许你只在单个文件中对项目的URL模式进行全局修改.
如果你对基本请求和响应流程这一节感到满意,请阅读本教程的第2节以开始使用数据库。