您的位置:首页 > 编程语言 > Go语言

Django教程之三-----编写你的第一个Django 应用(1)

2017-09-07 12:08 357 查看
让我们通过例子来学习。

贯穿这个教程,我们将知道你创建一个基本的调查问卷应用。

他包含2部分:

一个公共地址给别人观看调查问卷并投票。
一个管理地址让你添加,修改和删除调查问卷。
我将确保你已经安装了Django。你可以通过在shell提示符中输入如下命令来判断你是否安装了Django以及他的版本号:
$ python -m django --version

如果Django安装了,你将会看到你安装的版本号。如果没有,你将会得到错误信息:“No module named django”。

这个教程是基于Django1.11和Python3.4或者更新。如果你的Django版本不匹配,你可以升级到最新的版本。如果你使用python2.7,你可能要适当调整下你的代码

1. 创建一个项目

如果这是你第一次使用Django,你必须要注意一些最初的设置。那就是说,你需要自动生成一些代码来制定一个Django项目--一个Django实力的集合,包括数据库配置,Django制定的选项和应用程序指定的的设置。

在命令行中,cd到一个你想要放置你代码的路径,然后运行如下代码:$ django-admin startproject mysite
这将会在你当前的目录下创建一个mysite目录。

注意:你需要避免你项目的命名和Python内置名称或Django组件一致。细致点说,意思是你应该避免使用想django(和Django自己冲突)或者test(和Python包内置名称冲突)这样的名称。

代码应该放在那里?:如果你的背景是普通的PHP(没有使用现代的框架),你可能习惯性的将代码放在Web服务的文档根目录(例如/var/www这样的地方)。在Django里,完全不用这么做。将任何这些Python代码放在你的Web服务的文档根目录并不是一个好的想法,因为这将会有别人看到你代码的风险。那并不安全。

将你的代码放在一些文档根目录外面的路径,例如/home/mycode.

让我们看看startproject创建了什么:mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
这些文件是:

外面的mysite/根目录是你的项目的容器。它的名字对于Django来说并没有关系;你可以将它重命名为任何你喜欢的名字。
manage.py:一个命令行的功能允许你用多种途径与Django框架进行交互。
内层mysite/目录是你项目的真正的Python包。他的名称是你将要将其他任何东西导入其中的Python包的名称(例如,mysite.urls)
mysite/__init__.py:一个空的文件,告诉Python这个目录应该被当成是一个Python包。
mysite/settings.py:Django项目的设置/配置。
mysite/urls.py:Django项目的url声明。你的Django站点的内容目录。
mysite/wsgi.py:为你的项目提供服务的WSGI兼容式web服务的入口。
2. 开发服务器
让我们来验证你的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.

September 05, 2017 - 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框架,而不是web服务器。)

现在服务已经运行了,访问http://127.0.0.1:8000/在你的浏览器里,你将会看到一个“welcome to Django”的页面,以一种令人愉悦的,浅蓝色蜡笔写着。生效了!

改变端口:默认的,runserver命令启动开发服务器在内部IP和8000端口下。

如果你想要改变服务的端口,将它作为命令行的参数传递。例如,用8080端口启动服务的命令是:
$ python manage.py runserver 8080
如果你想改变服务的IP,也一样和端口一起传递。例如,为了监听所有可用的公用IP(如果你想漂浮的运行或者仅仅是想在其他的电脑上展示你的工作),使用
$ python manage.py runserver 0:8000

0是0.0.0.0的缩写。

runserver的自动重载
开发服务器根据需求自动的为每个请求重载Python代码。当代码改变后你不需要重新启动服务来生效,一些动作例如添加文件不会触发重启,所以你必须在这种情况下重启。

3.创建调查问卷app

现在你的环境--一个项目--已经建立好了,你将开始工作了。

每一个使用Django写的应用都包含遵循某个约束的包。Django提供了一个自动生成基础路径结构的功能,所以你可以专注于代码而不是创建目录。

项目对应用

一个项目和一个应用之间有什么区别?一个应用是指一个做某些事情的web应用--例如,一个博客系统,一个公共数据库或者一个简单的调查文件应用。一个项目是针对特定网站的配置和应用的集合。一个项目可以包含多个应用。一个应用也可以在多个项目中。

你的应用可以在你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
这个层次结构将会容纳调查问卷应用。

4.编写你的第一个视图

让我们来写第一个视图。打开文件polls/views.py然后将如下代码放进去:from django.http import HttpResponse

def index(request):
return HttpResponse("Hello, world. You're at the polls index.")这可能是Django中最简单的视图了。为了调用这个视图,我们需要将它映射到一个URL中--因为这个原因,我们需要一个URLconf。

为了在polls目录下创建一个URLconf,创建一个名为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.conf.urls import url

from . import views

urlpatterns = [
url(r'^$', views.index, name='index'),
]
接下来是在polls.urls模块中指定根URLconf.在mysite/urls.py中,添加一个导入django.conf.urls.include来插入在urlpatterns列表中的include(),所以最后是这样:mysite/urls.py
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.因为polls在他们自己的URLconf里(polls/urls.py),他可以放在"/polls/",或者"/fun_polls/",或者"/content/polls/",或任何其他根目录,这个应用仍然会工作

什么时候使用include()

当你包含其他URL模式时应该总是使用inlcude()。admin.site.urls是唯一的例外

和你看到的不匹配?

如果你看到include(admin.site.urls)而不是简单的admin.site.urls,你可能使用的Django的版本并不匹配这次教程。你可以切换到旧的教程或者新的Django版本。

现在,你已经将索引视图链接到了URLconf上。让我们来验证是否有效,运行如下的命令:$ python manage.py runserver
在浏览器中输入http://localhost:8000/polls/,你将会看到文本"Hello,world.You're at the polls index.",他在你的index视图里定义。

url()函数传递了4个参数,2个是必须的:regex和view,2个可选的kwargs,和name.在这一点上,值得回顾下这些参数的意义。

url()参数:regex

术语'regex'是一个常用的缩写形式意为‘regular expression’,它是一个在字符串上匹配模式的语法,或者在上例中,url模式。Django在第一个正则表达式开始,并且在列表中进行,将所请求的URL与每一个正则表达式进行比较,知道找到匹配的URL。

注意这些正则表达式不会搜索GET和POST参数,或者域名。例如,一个请求是https://www.example.com/myapp/,URLconf将会寻找myapp/。一个请求是https://www.example.com/myapp/?page=3,URLconf同样会搜寻myapp/。

如果你需要关于正则表达式的帮助,看WIKI百科中关于re模块的文档。同样jeffrey Friedl的书”Mastering Regular Expressions“也是很不错的。实际上,然而,你不需要成为一个正则表达式的专家,你只需要了解如何去捕获一些简单的模式。事实上,复杂的正则表达式可能会影响查找性能,所以你可能不应该依赖正则的全部功能。

最后,一个性能提示:这些正则表达式在URLconf模块第一个加载的时候编译,他们是超级快的(只要不是像上面说的那么复杂)

url()参数:view

当Django找到了一个匹配的正则表达式,Django调用指定的视图函数,和HttpRequest对象作为第一个参数,正则表达式捕获到的值作为其他参数。如果正则表达式使用简单的捕获,值被作为位置参数传递;如果它使用名称捕获,值将作为关键字参数传递。我们会给出一个例子

url()参数:kwargs

任意的关键字参数能以字典的形式传递给目标视图。我们不打算在这个教程中使用这一特性

url()参数:name

命名你的URL,让你可以从Django的任何其他地方,尤其是模板中引用它。这个强大的特性允许你在只接触单个文件的情况下对你项目的URL模式做全局的更改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: