• Tango with django 1.9 中文——3.Django基础


    让我们开始运用Django。本章主要是给你一个关于创建新项目和新应用过程的概览。在本章的末尾,你将建立起一个简单的由Django驱动的网站。

    3.1 配置测试

    让我们测试以下你的Python和Django安装是否满足本教程的要求。首先,打开新的命令行窗口并输入以下命令,查看安装的Python版本。

    $ python --version
    

    显示的python版本应该是2.7.5+ 或者 3.4+。

    如果使用虚拟环境,记得先激活它。

    接下来检查Django安装,在命令行窗口中输入以下命令,运行Python:

    $ python
    
    Python 2.7.10 (default, Jul 14 2015, 19:46:27)
    [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    

    接着在提示符处输入以下命令:

    >>> import django
    >>> django.get_version()
    '1.9.10'
    >>> exit()
    

    一切顺利的话,你会看到正确的Django版本,然后用exit()指令退出Python解释器。如果导入django失败,检查一下虚拟环境,在命令行窗口中用pip list指令查看该环境下安装了哪些包。

    如果在安装Django的过程中遇到了苦难,或者安装了不同版本,可以参考系统设置章节或者官方文档中的安装指南

    提示

    在本书中,你需要留意代码片段中包含的两个东西。

    以美元符号($)开头的代码,表示这是命令行指令。

    以>>>开头的代码,是需要输入到Python解释器的。$ python$ py可以启动解释器。退出解释器的命令是exit()或者quit()

    3.2 创建Django项目

    进入你的工作区目录,发布以下指令:

    $ django-admin.py startproject tango_with_django_project
    

    如果还没有工作区目录,可以建立一个,这样你可以把你的Django项目和其他代码项目存放在这个目录中。我们将用<workspace>引用你的工作区目录,你需要将它转换成自己实际的目录,比如 /Users/leifos/Code/ 或者 /Users/maxwelld90/Workspace/。

    找不到 django-admin.py?

    试试输入django-admin 看看。根据你的设置,有些系统可能不认识 django-admin.py。

    对于Windows,你可能必须输入django-admin.py的完整路径,比如:

    python c:python27scriptsdjango-admin.py startproject tango_with_django_project

    这个命令将调用django-admin.py文件,为你创建一个叫做 tango_with_django_project 的项目。通常,我们在Django项目目录后面加上后缀_project,使之意义明确。当然,具体怎么命名你自己说了算。

    你会在工作区中看到一个新建的 tango_with_django_project 目录。在这个新目录中,有两样东西:

    • 另一个跟项目同名的目录 tango_with_django_project;
    • 一个叫做 manage.py 的Python文件。

    我们将这个嵌入的tango_with_django_project目录称为项目配置目录。在这个目录中,你可以看到四个Python文件。稍后我们会具体讨论这些文件,现在先了解一下:

    • _init_.py,一个空白的Python文件,用来告诉解释器该目录是一个Python包;
    • settings.py,储存所有Django项目设置的地方;
    • urls.py,储存项目URL模式的Python文件;
    • wsgi.py,用于运行开发服务器和将你的项目部署到生成环境。

    在项目目录中,还有另外一个文件manage.py。我们在开发项目的过程中将总要调用它。它提供了一系列让你可以维护你的Django项目的指令。比如,manage.py 允许你运行Django内建的开发服务器,测试你的应用程序,运行各种数据库指令等。事实上,我们想运行的大多数Django命令,基本都会用到这个文件。

    Django Admin 和 Manage

    如果想要深入了解Django admin文件,可以参考官方文档的Admin and Manage scripts

    运行 python manage.py help命令,可以查看可用的命令列表。

    现在你可以通过下面的指令来试试manage.py文件:

    $ python manage.py runserver
    

    运行该指令将启动Python,并通知Django初始化它的轻量级开发服务器。在命令行窗口中应该可以看到类似下面的输出:

    $ 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.
    
    October 2, 2016 - 21:45:32
    Django version 1.9.10, using settings 'tango_with_django_project.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CONTROL-C.
    

    在输出信息中,我们可以看到很多东西。首先,没有问题阻碍程序运行。第二,有一个警告信息,unapplied migrations 未实施的数据迁移。我们将在设置数据库章节深入讨论它,现在暂时忽略。第三,最重要的一点,Django开发服务器的地址被指定为URL http://127.0.0.1:8000/

    现在,打开你的网页浏览器然后输入地址http://127.0.0.1:8000/ ,看到的应该是类似下面的情况:

    ![ch3-django-powered-page](E:Python3 Learningooks ango_with_django_19-master ango_with_django_19-mastermanuscriptimagesch3-django-powered-page.png)

    你可以随时通过在命令行窗口中输入 CTRL+C 命令来停止开发服务器。如果你希望在不同的端口上运行开发服务器,或者允许用户从其他机器上访问,你可以通过设置一些可选参数来达成。例如下面的命令:

    $ python manage.py runserver <your_machines_ip_address>:5555
    

    执行这条命令将使开发服务器回应TCP端口5555上的请求。你需要把<your_machines_ip_address>替换成你自己电脑的IP地址或者127.0.0.1。

    不知道自己的IP地址?

    如果使用0.0.0.0,Django会显示出你的IP地址。不妨试试:

    python manage.py runserver 0.0.0.0:5555

    当设置端口时,不要使用80或者8080端口,因为它们习惯上用于HTTP通信。还有,所有1024以下端口都被认为是操作系统保留的,不要使用。

    在你的网络中的其他机器上,也可以演示你的应用。配置开发服务器的地址为你电脑的IP,然后在其他机器上进入http://<your_machine_ip_address>:<port>/就可以浏览你的网站。当然,这还涉及到你所在网络的具体设置。可能有代理服务器或者防火墙需要配置。如果你不能远程浏览你的网站,请与你的网络管理员联系确认。

    3.3 建立Django App

    每个Django项目是组成特定网络应用或网站的一些配置文件和app的集合。通过开发一些app,然后可以将其复用到不同的项目中,只造成很小的影响。这种方法很好的促进了软件工程化。

    每个Django app有自己特定的任务。你需要建立一些为你的网站提供特定功能的app。比如,我们可以假设一个项目可能包括以下app:一个投票app,一个注册app,以及一个指定内容相关app。在另一个项目中,我们可能想复用投票和注册app,这样我们就可以把这两个app包括在第二个项目中。稍后我们详细讨论。眼下我们先建立一个Rango app。

    首先,用命令行窗口在你的工作区目录中运行以下命令:

    $ python manage.py startapp rango
    

    startapp命令在你的项目根目录中创建一个叫做rango的新目录,它包含以下Python文件:

    • 又一个_init_.py,与前文讨论的功能一样;
    • admin.py,在这里你可以注册你的模型,然后享受Django便利的管理界面;
    • apps.py,所有app的具体配置;
    • models.py,储存app数据模型;
    • tests.py,储存app代码的测试函数;
    • views.py,处理请求并响应;
    • migrations 目录,模型的数据库具体信息;

    views.py 和 models.py 在任何app中都要用到,并组成Django的主要建造设计模式,即 Model-View_template 模式。你可以参考官方文档,了解模型、视图和模板具体是怎么关联到一起的。

    在开始建立你自己的模型和视图之前,你得先让你的Django项目知道新app的存在。这需要在项目配置目录中,修改settings.py文件。打开该文件,找到 INSTALLED_APPS元组。将rango app添加到元组的末尾,像下面这样:

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rango',
    ]
    

    重启开发服务器,如果没有出现错误,那么rango app已经纳入项目,你可以进入下一个步骤。

    startapp魔法

    当用python manage.py startapp命令创建新app时,Django可能会自动将app名称添加到setting.py文件中的 INSTALLED_APPS 列表中。尽管如此,在继续深入之前,检查一下看所有东西是否都设置正确是一个良好的做法。

    3.4 建立视图

    现在Rango app已经建立了,现在我们建立一个简单的视图。作为我们的第一个视图,我们不妨先只返回一些文本内容到客户端——暂时先不考虑使用模型和模板。

    在你的IDE中,打开新建的rango app目录中的views.py文件。删除注释`# Create your views here.,这样你就有了一个空白文件。

    现在你可以添加以下代码:

    from django.http import HttpResponse
    
    def index(request):
        returen HttpResponse("Rango says hey there partner!")
    

    分解这三行代码:

    • 我们首先从django.http模块导入HttpResponse对象;
    • views.py文件中的每个视图都是相互独立的函数。在这个实例中,我们只建立了一个视图,叫做index。
    • 每个视图至少具有一个参数——一个HttpRequest对象。按照常规,这是一个已命名的请求,但是你可以按照自己的意愿重命名。
    • 每个视图必须返回一个HttpResponse对象。一个简单的HttpResponse对象具有一个字符串参数,用于描述客户端请求的视图页面上下文。

    当视图建立好以后,距离用户可以访问它还有其他步骤。为了让用户看到你的视图,你必须将一个Uniform Resurece Locator(URL)映射到该视图:

    打开项目目录中的urls.py文件,键入以下urlpatterns代码,来建立一个入门级映射:

    from rango import views
    
    urlpatterns=[
        url(r'^$',view.index,name='index'),
        url(r'^admin/',admin.site.urls),
    ]
    

    这将rango app的index视图映射到基础URL上。运行开发服务器,访问http://127.0.0.1:8000, 或你设置的其他开发服务器地址。你将看到index视图渲染过的输出页面。

    3.5 映射URLs

    除了将URLs直接从项目映射到app,我们可以通过改变视图的接入URL,将我们的app更加模块化(然后可以复用)。首先,我们需要修改项目的urls.py文件,将它指向Rango app来处理所有涉及Rango app的请求。然后我们需要指定Rango怎么处理这些请求。

    首先,打开项目配置目录中的项目urls.py文件。该路径相对于你的工作区目录,应该为 <workspace>/tango_with_django_project/tango_with_django_project/urls.py。将urlpatterns更新为下面这样:

    from django.conf.urls import url
    from django.contrib import admin
    from django.conf.urls import include
    from rango import views
    
    urlpatterns = [
    	url(r'^$', views.index, name='index'),
    	url(r'^rango/', include('rango.urls')),
        #以上映射将所有开头为 rango/ 的URL指向rango应用。
    	url(r'^admin/', admin.site.urls),
    	]
    

    Django框架将urlpatterns设计成一个Python列表。添加的映射查找能匹配^rango/模式的URL字符串。当匹配成功后,该URL字符串的其他部分将通过include()函数(来自django.conf.urls)传递到rango.urls处理。

    URL chain

    将这想象成一个访问URL字符串的URL链——如上面的URL链图。在这个链中,域名被去掉,URL字符串的其他部分(rango/)被传递到tango_with_django项目,然后找到匹配模式并去掉rango/,剩余一个空字符串传递到rango应用,供其操作。

    接下来,我们需要在rango应用的目录下建立一个新文件叫做urls.py,用来处理剩下的URL字符串(将控制富川映射到index视图):

    from django.conf.urls import url
    from rango import views
    
    urlpatterns=[
      url(r'^$',views.index,name='index'),
    ]
    

    这段代码引入了URL映射相关的Django组件以及rango的views模块。这使我们可以调用url函数,并将urlpatterns中的映射指向index视图。

    当我们谈论URL字符串时,我们认为给出的URL主机部分已经被去掉了。URL主机部分表示映射到网络服务器的主机地址或者域名,比如http://127.0.0.1:8000 或者 http://www.tangwithdjango.com。去掉主机部分意为着Django组件只需要处理剩余的URL字符串。举个例子,给出的URL为http://127.0.0.1:8000/rango/about/,Django得到的URL字符串为 /rango/about/。

    我们创建的URL映射调用Django的url()函数,其中第一个参数是正则表达式 ^$ ,它匹配的是空字符串。因为^表示字符串开头,$表示字符串结尾,首尾之间没有任何东西,所以只能匹配空字符串。用户提供的任何可以匹配该表达式的URL字符串将调用视图函数 views.index()。你可能会想,匹配一个空的URL没有任何用处——使用它干嘛?记住,这不是整个空的URL,只是URL字符串中的一部分。这是因为Django首先在项目urls.py中的正则表达式(比如 rango/)中匹配原始字符串,成功后去掉 rango/部分。然后Django将剩下的空字符串传递到rango应用,再通过rango/urls.py中的正则表达式匹配。

    下一个传递给url()函数的参数是index视图,它将处理传入的请求。再后的是一个可选参数name,它被设置为字符串'index'。通过命名URL映射,后面我们可以使用反向URL匹配。这样我们可以通过名称而不是URL引用URL映射。下文建立模板时我们将解释怎么使用它。更多信息可以参考官方文档的相关章节

    现在,重启Django开发服务器,访问http://127.0.0.1:8000/rango/。如果一切顺利,你应该看到文本<Rango says hey there partner!>。如下面的截屏:

    about page

    在每个app中,你将会创建很多URL映射。这个入门的映射相当简单,但是随着本书的深入,我们将建立一些更复杂、更参数化的URL映射。

    领会Django时怎么处理URLs也是很重要的。现在它可能看起来很令人困惑,但是随着教程深入,我们会建立越来越多的URL映射,所以你很快就会成为专家。更多具体信息和实例请参考URLs官方文档

    正则表达式

    Django URL模式使用正则表达式进行匹配。花时间熟悉怎么在python中使用正则表达式是很值得的。Python官方文档包含了一个良好的正则表达式指南。另外regexcheatsheet.com 提供了一个整洁的通用表达式概览

    如果你正在使用版本控制,现在是一个推送工作区更改的好时机。

    3.6 基本工作流程

    本章中所学习的内容可以简单概括为一个步骤列表。这里,我们提供你所完成的两个主要任务的列表。以后当你需要复习某些步骤时,可以回头看本小节。

    创建新的Django项目

    1. 通过命令$ python django-admin.py startproject <name>创建项目,<name>是你的项目名称。

    创建新的Django应用

    1. 通过命令$ python manage.py startapp <appname>创建app,<appname>是你的应用名称。
    2. 将新建的app添加到项目settings.py文件中的INSTALLED_APPS元组中,让Django认识你的app。
    3. 在项目urls.py文件中,添加指向app的映射。
    4. 在app目录中新建urls.py文件,处理传入的URL字符串,指定视图。
    5. 在app目录的views.py中,创建请求的视图,确保它们返回一个HttpResponse对象。

    练习

    现在你可以运行Django和你的新app,完成下面的练习,巩固你所学的知识。到达这个阶段是学习Django的一个重大里程碑。创建视图和指向视图的URL映射,是开发更复杂和可以复用的网络应用的第一步。

    • 复习本章,确保你了解了URL是怎么映射到视图的。
    • 创建一个叫做about的新视图,返回HttpResponse对象:<'Rango says here is the about page.'>
    • 将这个视图映射到 /rango/about。对于这一步,你只需要编辑Rango app的urls.py文件。注意/rango/部分由项目urls.py处理。
    • 修改index视图的HttpResponse对象,使之包含一个指向about页面的链接。
    • 修改about视图的HttpResponse对象,使之包含一个指向index页面的链接。
    • 现在你真正开始学习本书了,作者的Twitter @tangowithdjano

    提示

    如果你感觉很难完成以上练习,以下这些提示应该可以提供灵感去解决它们。

    • 在views.py中,建立一个函数,def about(request):,使它返回一个HttpResponse对象,将你的HTML插入这个对象。
    • 在rango/urls.py中添加新的映射到about()视图,用来匹配的正则表达式为 `r'^about/' 。
    • 更新你的index()视图,加入指向about视图的链接。可以像这样:Rango says hey there partner! <br/><a href='/rango/about/'>About</a>
    • 在about()视图中也加上可以返回主页面的链接<a href="/rango/">Index</a>
    • 如果你还没度过Django官方教程的第一部分,现在是时候停下来去读了。(译者注:中文版的教程可以参考博客园大江东流大神的博客
  • 相关阅读:
    Data Block Structure (Try to Understand...)
    Some pieces of "Scripting"
    奥数模块之小学一年级版
    mysql 新增索引 sql
    mysql 导出数据 每个表的前n条数据 mysqldump limit
    Servlet的urlpattern详解(转)
    过滤器与拦截器的区别(转)
    用csv导出文件时,每个cell加上双引号后,可以原样输入cell中的内容,不管是否cell中是否包含逗号或者换行,但是如果包含双引号,则换行失效,解决方法如下
    java.lang.OutOfMemoryError: Java heap space 和 java.lang.OutOfMemoryError: PermGen space 解决方法
    解决 eclipse svn插件 状态图标不显示
  • 原文地址:https://www.cnblogs.com/dreamkeeper/p/7786871.html
Copyright © 2020-2023  润新知