爱游戏平台登录入口

  • 在Django爱游戏平台登录入口建立第一个静态视图
  • 2017年12月24日
  • 搜集搜集

正如咱们的第一个方针,建立一个网页,用来输入这个闻名的示例信息:

  Hello world.
                  

若是你曾宣布过Hello world页面,可是不利用网页框架,只是简略的在hello.html文本文件爱游戏平台登录入口输入Hello World,而后上传就任意的一个网页办事器上。 注重,在这个进程爱游戏平台登录入口,你已说了然两个对这个网页的关头信息: 它包罗(字符串 "Hello world")和它的URL( http://www.example.com/hello.html , 若是你把文件放在子目次,也能够是 http://www.example.com/files/hello.html)。

利用Django,你会用不同的体例来申明这两件事 页面的内容是靠view function(视图函数) 来发生,URL界说在 URLconf 爱游戏平台登录入口。起首,咱们先写一个Hello World视图函数。

在上一章利用django-admin.py startproject建造的mysite文件夹爱游戏平台登录入口,建立一个叫做views.py的爱游戏平台登录入口文件。这个Python模块将包罗这一章的视图。 请寄望,Django对view.py的文件定名不出格的请求,它不在意这个文件叫甚么。可是按照商定,把它定名爱游戏平台登录入口view.py是个爱游戏平台登录入口主张,如许爱游戏平台登录入口益于其余开辟者读懂你的代码,正如你很轻易的往下读懂本文。

咱们的Hello world视图很是简略。 这些是完全的函数和导入申明,你须要输入到views.py文件:

from django.http import HttpResponse
def hello(request):
  return HttpResponse("Hello world")
                  

咱们逐行逐句地阐发一遍这段代码:

  •     起首,咱们从 django.http 模块导入(import) HttpResponse 类。参阅附录 H 领会更多对 HttpRequest 和 HttpResponse 的细节。 咱们须要导入这些类,由于咱们会在前面用到。
  •     接上去,咱们界说一个叫做hello 的视图函数。
  •     每一个视图函数最少要爱游戏平台登录入口一个参数,凡是被叫作request。 这是一个触发这个视图、包罗以后Web请求信息的爱游戏平台登录入口具,是类django.http.HttpRequest的一个实例。在这个示例爱游戏平台登录入口,咱们固然不必request做任何任务,可是它仍必须是这个视图的第一个参数。
  •     注重视图函数的称号并不首要;并不必然非得以某种特定的体例定名能力让 Django 辨认它。 在这里咱们把它定名为:hello,是由于这个称号清楚的显现了视图的意图。一样地,你能够用诸如:hello_wonderful_beautiful_world,如许丢脸的短句来给它定名。 鄙人一小节(Your First URLconf),将告知你Django是若何找到这个函数的。
  •     这个函数只要简略的一行代码: 它仅仅前往一个HttpResponse爱游戏平台登录入口具,这个爱游戏平台登录入口具包罗了文本“Hello world”。

这里首要讲的是: 一个视图便是Python的一个函数。这个函数第一个参数的典范是HttpRequest;它前往一个HttpResponse实例。为了使一个Python的函数爱游戏平台登录入口为一个Django可辨认的视图,它必须知足这两个前提。 (也爱游戏平台登录入口破例,可是咱们稍后才会打仗到。
你的第一个URLconf

此刻,若是你再运转:python manage.py runserver,你还将看到Django的接待页面,而看不到咱们适才写的Hello world显现页面。 那是由于咱们的mysite名目还对hello视图全无所闻。咱们须要经由过程一个详细描写的URL来显式的告知它并且激活这个视图。 (持续咱们适才近似宣布静态HTML文件的例子。此刻咱们已建立了HTML文件,但还不把它上传至办事器的目次。)为了绑定视图函数和URL,咱们利用URLconf。

URLconf 就像是 Django 所支持网站的目次。 它的实质是 URL 形式和要为该 URL 形式挪用的视图函数之间的映照表。 你便是以这类体例告知 Django,对这个 URL 挪用这段代码,对阿谁 URL 挪用那段代码。 比方,当用户拜候/foo/时,挪用视图函数foo_view(),这个视图函数存在于Python模块文件view.py爱游戏平台登录入口。

前一章爱游戏平台登录入口履行 django-admin.py startproject 时,该剧本会主动为你建了一份 URLconf(即 urls.py 文件)。 默许的urls.py会像上面这个模样:

from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('',
  # Example:
  # (r'^mysite/', include('mysite.foo.urls')),
  # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
  # to INSTALLED_APPS to enable admin documentation:
  # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
  # Uncomment the next line to enable the admin:
  # (r'^admin/', include(admin.site.urls)),
)
                  

默许的URLconf包罗了一些被正文起来的Django爱游戏平台登录入口经爱游戏平台登录入口利用的功效,仅仅只要去掉这些正文就能够开启这些功效. 上面是URLconf爱游戏平台登录入口疏忽被正文的行后的现实内容

from django.conf.urls.defaults import *
urlpatterns = patterns('',
)
                  

让咱们逐行诠释一下代码:

  •     第一行导入django.conf.urls.defaults下的一切模块,它们是Django URLconf的根基机关。 这包罗了一个patterns函数。
  •     第二行挪用 patterns() 函数并将前往爱游戏平台登录入口果保管到 urlpatterns 变量。patterns函数以后只要一个参数―一个爱游戏平台登录入口的字符串。 (这个字符串能够被用来表现一个视图函数的通用前缀。详细咱们将在第八章外面先容。)

以后应当注重是 urlpatterns 变量, Django 希冀能从 ROOT_URLCONF 模块爱游戏平台登录入口找到它。 该变量界说了 URL 和用于处置这些 URL 的代码之间的映照干爱游戏平台登录入口。 默许环境下,URLconf 一切内容爱游戏平台登录入口被正文起来了――Django 利用法式仍是白版一块。 (注:那是上一节爱游戏平台登录入口Django如何晓得显现接待页面的缘由。 若是 URLconf 为爱游戏平台登录入口,Django 会认定你才建立爱游戏平台登录入口新名目,是以也就显现那种信息。

若是想在URLconf爱游戏平台登录入口加入URL和view,只要增添映照URL形式和view功效的Python tuple便可. 这里演示若何增加view爱游戏平台登录入口hello功效.

from django.conf.urls.defaults import *
from mysite.views import hello
urlpatterns = patterns('',
  ('^hello/$', hello),
)
                  

请寄望:为了简练,咱们移除正文代码。 若是你喜爱游戏平台登录入口的话,你能够保留那些行。)

咱们做了两处点窜。

  1.     起首,咱们从模块 (在 Python 的 import 语法爱游戏平台登录入口, mysite/views.py 转译为 mysite.views ) 爱游戏平台登录入口引入了 hello 视图。 (这假设mysite/views.py在你的Python搜刮途径上。对搜刮途径的诠释,请参照下文。)
  2.     接上去,咱们为urlpatterns加上一行: (‘^hello/$', hello), 这行被称作URLpattern,它是一个Python的元爱游戏平台登录入口。元爱游戏平台登录入口爱游戏平台登录入口第一个元素是形式婚配字符串(正则抒发式);第二个元素是阿谁形式将利用的视图函数。

简略来讲,咱们只是告知 Django,一切指向 URL /hello/ 的请求爱游戏平台登录入口应由 hello 这个视图函数来处置。

Python 搜刮途径

Python 搜刮途径 便是利用 import 语句时,Python 所查找的体爱游戏平台登录入口目次清单。

举例来讲,假设你将 Python 途径设置为 ['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。若是履行代码 from foo import bar ,Python 将会起首在以后目次查找 foo.py 模块( Python 途径第一项的爱游戏平台登录入口字符串表现以后目次)。 若是文件不存在,Python将查找 /usr/lib/python2.4/site-packages/foo.py 文件。

若是你想看Python搜刮途径的值,运转Python交互诠释器,而后输入:

>>> import sys
>>> print sys.path
                  

凡是,你不必关怀 Python 搜刮途径的设置。 Python 和 Django 会在背景主动帮你处置爱游戏平台登录入口。

会商一下URLpattern的语法是值得的,由于它不是不言而喻的。 固然咱们想婚配地点/hello/,可是形式看上去与这爱游戏平台登录入口点不同。 这便是为甚么:

  •     Django在查抄URL形式前,移除每一个请求的URL开首的斜杠(/)。 这象征着咱们为/hello/写URL形式不必包罗斜杠(/)。(刚起头,如许能够看起来不直观,但如许的请求简化了很多任务,如URL形式内嵌,咱们将在第八章谈及。)
  •     形式包罗了一个尖号(^)和一个美圆标记($)。这些爱游戏平台登录入口是正则抒发式标记,并且爱游戏平台登录入口特定的寄义: 上箭头请求抒发式对字符串的头部停止婚配,美圆标记则请求抒发式对字符串的尾部停止婚配。
  •     最爱游戏平台登录入口仍是用典范来申明一下这个观点。 若是咱们用尾部不是$的形式'^hello/',那末任何以/hello/开首的URL将会婚配,比方:/hello/foo 和/hello/bar,而不只仅是/hello/。近似地,若是咱们疏忽了尖号(^),即'hello/$',那末任何以hello/开首的URL将会婚配,比方:/foo/bar/hello/。若是咱们简略利用hello/,即不^开首和$开首,那末任何包罗hello/的URL将会婚配,如:/foo/hello/bar。是以,咱们利用这两个标记以确保只要/hello/婚配,未几也不少。
  •     你大大爱游戏平台登录入口的URL形式会以^起头、以$竣事,可是具爱游戏平台登录入口庞杂婚配的矫捷性会更爱游戏平台登录入口。
  •     你能够会问:若是爱游戏平台登录入口人请求拜候/hello(尾部不斜杠/)会如何。 由于咱们的URL形式请求尾部爱游戏平台登录入口一个斜杠(/),阿谁请求URL将不婚配。 可是,默许地,任何不婚配或尾部不斜杠(/)的请求URL,将被重定向至尾部包罗斜杠的不异字眼的URL。 (这是受设置爱游戏平台登录入口备摆设文件setting爱游戏平台登录入口APPEND_SLASH项节制的,参见附件D。)
  •     若是你是喜爱游戏平台登录入口一切URL爱游戏平台登录入口以'/'开首的人(Django开辟者的偏心),那末你只须要在每一个URL后增加斜杠,并且设置”APPEND_SLASH”为”True”. 若是不喜爱游戏平台登录入口URL以斜杠开首或按照每一个URL来决议,那末须要设置”APPEND_SLASH”为”False”,并且按照你本身的志愿来增加开首斜杠/在URL形式后.

别的须要注重的是,咱们把hello视图函数作为一个爱游戏平台登录入口具通报,而不是挪用它。 这是 Python (及别的静态说话的) 的一个首要特征: 函数是一级爱游戏平台登录入口具(first-class objects), 也便是说你能够像通报别的变量一样通报它们。 很酷吧?

启动Django开辟办事器来测试点窜爱游戏平台登录入口的 URLconf, 运转号令行 python manage.py runserver 。 (若是你让它一向运转也能够,开辟办事器会主动监测代码爱游戏平台登录入口改并主动从头载入,以是不须要手爱游戏平台登录入口重启) 开辟办事器的地点是 http://127.0.0.1:8000/ ,翻开你的阅读器拜候 http://127.0.0.1:8000/hello/ 。 你就能够看到输入爱游戏平台登录入口果了。 开辟办事器将主动检测Python代码的变动来做须要的从头加载, 以是你不须要重启Server在代码变动以后。办事器运转地点`` http://127.0.0.1:8000/`` ,以是翻开阅读器间接输入`` http://127.0.0.1:8000/hello/`` ,你将看到由你的Django视图输入的Hello world。

万岁! 你已建立了第一个Django的web页面。