在shell中运行如下命令来检查django是否已安装及其版本python
python -m django --version
若是django已经安装,你应该看到安装的版本号,若是尚未安装,你会看到一个‘no module named django’的错误web
建立一个项目正则表达式
django-admin startproject mysite
这将会在你的当前目录下生成一个mysite目录shell
注意,你给项目命名时,项目名称不能和python或django的内部组件名称同名,尤为,你应该避免使用相似django(与django自己冲突)或test(与内置python包冲突)这样的名称数据库
咱们看看startproject创造了什么django
mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py
外部mysite/根目录只是项目的容器,它的名字对django来讲可有可无,你能够将它重名名为你喜欢的任何东西浏览器
manage.py:一个命令行实用程序,容许您以各类方式与此django项目进行交互,您能够manage.py在django-admin和manage.py中阅读有关的全部详细信息服务器
内部mysite/目录是项目的实际python包,它的名称是您须要用来导入其中任何内容的python包名称(例如mysite.urls)网络
mysite/__init__.py:一个空文件,告诉python该目录应该被视为python包app
mysite/settings.py:此django项目的设置/配置。django设置将告诉您有关设置如何工做的全部信息
mysite/urls.py:这个django项目的url声明,您的django支持的站点的‘目录’
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. August 04, 2018 - 15:50:53 Django version 1.11, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
暂时忽略有关未应用数据库迁移的警告,咱们很快就会处理数据库
您已经启动了django开发服务器,这是一个纯粹用python编写的轻量级web服务器,咱们已经将它包含在django中,所以您能够快速开发,而无需处理配置生产服务器(如Apache),直到您准备好进行生产
注意:不要在相似生产环境的任何地方使用这个服务器,它仅用于开发时使用
如今服务器正在运行,使用web浏览器访问http://127.0.0.1:8000,你会看到一个‘欢迎来到django’的页面
默认该runserver命令在端口8000的内部ip上启动开发服务器
若是要更改服务器的端口,请将其做为命令行参数传递
python manage.py runserver 8080
若是要更改服务器的ip,请将其与端口一块儿传递,例如,要监听全部可用的公共ip,若是你想要在网络上的其余计算机上展现你的工做,这颇有用
python manage.py runserver 0:8000
0是0.0.0.0的快捷方式
开发服务器根据须要自动为每一个请求从新加载python代码,您无需从新启动服务器便可使代码更改生效,可是,某些操做(如添加文件)不会触发从新启动,所以在这些状况下您必须从新启动服务器
建立民意调查应用
在django编写的每一个应用程序都包含一个遵循特定约定的python包。django附带了一个实用程序,能够自动生成应用程序的基本目录结构,所以您能够专一于编写代码而不是建立目录
项目和应用
项目和应用程序之间有什么区别?应用程序是执行某些操做的web应用程序,例如,weblog系统,公共记录数据库或简单的轮询应用程序,
项目是特定网站的配置和应用程序的集合。项目能够包含多个应用程序,一个应用程序能够在多个项目中
您的应用程序能够存在于python路径的任何位置,在本教程中,咱们将您的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代码
from django.http import HttpResponse def index(request): return HttpResponse('hello,world')
这是django最简单的视图,要调用视图,咱们须要将其映射到url,为此咱们须要一个urlconf
要在polls目录中建立urlconf,请建立一个名为url.py的文件,您的app目录如今应该以下所示
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py urls.py views.py
在该polls/urls.py文件中包含如下代码
from django.conf.urls import url from . import views#等同于from polls import views urlpatterns=[ url(r'^$',views.index,name='index'), ]
下一步是将根urlconf指向polls.urls模块,在mysite/urls.py,添加导入django.conf.urls.include并include()在urlpatterns列表中插入,因此你有:
from django.conf.urls import include,url from django.contrib import admin urlpatterns=[ url(r'^polls/',include('polls.urls')), url(r'^admin/',admin.site.urls), ]
该include()函数容许引用其余urlconf。请注意,该include()函数的正则表达式没有$(字符串结尾匹配字符),而是一个尾部斜杠。每当django遇到include(),它都会删除与该点匹配的url的任何部分,并将剩余的字符串发送到包含的urlconf以进行进一步的处理
背后的想法,include()是使即插即用的url变得容易,因为民意调查位于他们本身的urlconf(polls/urls.py)中,所以能够将它们放在‘/polls/’下,或‘/content/polls/’下,或任何其余路径根目录下,而且应用仍会工做
何时用include()
include()当您包含其余url模式时,应始终使用。admin.site.urls是唯一的例外
与你看到的不符?
若是您看到的include(admin.site.urls)不是公正的admin.site.urls,那么您可能正在使用与本教程版本不匹配的django版本,您将要切换到较旧的教程或较新的Django版本。
您如今已将index
视图链接到URLconf。让咱们验证它是否正常工做,运行如下命令:
python manage.py runserver
在浏览器中转到http://localhost:8000/polls/,您应该看到文本‘hello,world’,您在index视图中定义的
该url()函数传递了四个参数,两个必需:regex和view,以及两个可选:kwargs,和name。在这一点上,值得回顾一下这些论点的用途
url()参数:正则表达式
它是用于匹配字符串中的模式的语法,或者在这种状况下是url模式。django从第一个正则表达式开始,沿着列表向下,将请求的url与每一个正则表达式进行比较,直到找到匹配的正则表达式
请注意,这些正则表达式不会搜索GET和POST参数或域名。例如,在请求中
https://www.example.com/myapp/
,URLconf将查找myapp/
。在请求中
https://www.example.com/myapp/?page=3
,URLconf也会查找myapp/
。
只须要知道如何捕获简单模式,复杂的正则表达式具备较差的查找性能,
最后,一个性能说明,这些正则表达式是在第一次加载urlconf模块时编译的,它们超快(只要查找不是太复杂)
url()参数:视图
当django找到正则表达式匹配是,django调用指定的视图函数,将HttpRequest对象做为第一个参数,将正则表达式中的任何‘捕获’值做为其余参数,若是正则表达式使用简单捕获,则值将做为位置参数传递,若是它使用命名捕获,则值将做为关键字参数传递
url()参数:kwargs
任意关键字参数能够在字典中传递到目标视图,咱们不打算在教程中使用这个功能
url()参数:名称
命名您的url可以让您从django的其余地方明确的引用它,尤为是在模板中,此强大功能容许您在仅触摸单个文件的同时对项目的url模式进行全局更改