Django的第一步(第一节)

写下你的第一个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的所有功能在django-admin and manage.py
  • 内部的mysite/是你django项目的实际文件夹.它的名字是你需要用来导入任何内容的Python包名(例如:mysite.urls)
  • mysite/__init__.py:一个空的文件用来告诉python,这个文件夹是一个python包.如果你是一个python初学者,建议你先了解一下python包的含义
  • mysite/setting.py:用于配置django的设置.通过django settings可以了解到settings的工作方式
  • mysite/urls.py:django项目的url管理器,可以设置你django项目可以访问的网页url.通过URL dispatcher可以了解更多关于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:09
Django 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服务器。)    

    现在服务器正在运行,可以通过http://127.0.0.1:8000/来访问你的网页,你可以看到"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:8000
00.0.0.0的简称.有关开发服务器的完整文档可以在runserver参考中找到。

    

自动重新加载服务器:

    您无需重新启动服务器以使代码更改生效。但是,某些操作(如添加文件)不会触发重新启动,因此在这种情况下您必须重新启动服务.

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

创建一个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 HttpResponse


def 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 path

from . import views

urlpatterns = [
    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 admin
from django.urls import path,include

urlpatterns = [
    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

    通过浏览器访问http://localhost:8000/polls/,然后你应该可以看到"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节以开始使用数据库。








原文地址:https://www.cnblogs.com/GF66/p/9785489.html