为了账号安全,请及时绑定邮箱和手机立即绑定

吸星换月昊天塔之Django:创建第一个应用

2016.07.13 14:40 5574浏览

在编程世界,一个叫做华夏的国家,一个少年坐在电脑前,手指如飞,在他的身后一个老者慈祥的注视着他。

这个少年就是我们的主角凌天,身后的老者就是他的师父,没有人知道他叫什么名字,只记得在很久以前人们都叫他龟叔。

凌天好像感觉到有人出现在他的身后,停下了手上的动作,恭敬的看了龟叔一眼说:“师父。”

“小天啊,你的HTTP法则领悟的如何了?”龟叔对自己的这个徒弟很满意,虽然天赋一般,但是非常的刻苦,经常到深夜还在打代码。这是一个强者为尊的世界,不会打代码就讨不到老婆,更不能像乔帮主和盖茨两位天尊一样,笑傲天下。

“回师傅,HTTP全称为超文本传输协议(Hyper Text Transfer Protocol),是互联网上应用最为广泛的一种网络协议,所有的WWW文件都要遵循这个标准。它是一个客户端和服务端的请求和应答的标准,我们可以通过如Web浏览器或网络爬虫等工具来发送一个请求,指定访问服务器的一个端口,默认为80,而服务端收到客户端的请求以后,就会返回我们请求的结果,它可能是一个HTML页面,一些文字,也可能是一张图片,一个视频,还会携带一些信息,其中最主要的就是状态码,200表示成功,404表示访问的资源不存在,500表示服务器出错。而这些内容,需要通过浏览器才能够解析成漂亮的页面,正因为HTTP法则,才拥有了编程世界中Web工程师这个流派,他们实力强横,穿梭虚空,天下之大皆可去之。”凌天说道。

“恩,不错,看来你对HTTP已经有了基础的了解,可以开始修行武技了,天儿你要记住,对于我们修行者来说,武技和法则都是必备的,一个只懂得法则不懂武技的人,他是没有任何战斗力的,只能在各个门派进行讲道,真正让他去战斗,他就原形毕露。而只懂得武技不懂法则的人,只会简单应用,也只能成为各大宗门的外门弟子,不可能进入像谷阁这样的超级宗门的。”龟叔害怕凌天成为砖家那种只会讲理论的人,所以忍不住多说了几句。

“徒儿已经将WSGI按照师傅的标准演练了许多次了,师傅你来看。”凌天指了一下面前的电脑。

龟叔走上前去查看:
index.py

# environ:包含所有HTTP请求信息的Python dict对象
# start_response:用于发送HTTP响应的函数
def index(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>Hello, World.</h1>']

server.py

# 导入需要的模块
from wsgiref.simple_server import make_server
# 从index.py中导入index函数
from index import index

# 创建一个服务器,IP为空,端口8000,处理函数是index
httpServer = make_server('', 8000, index)
print('Serving HTTP on port 8000...')
# 开始监听HTTP请求:
httpServer.serve_forever()

龟叔打开命令提示符,进入项目所在文件夹,输入python server.py回车以后,看到了如下信息:
Serving HTTP on port 8000...
龟叔点了点头,打开浏览器,输入:http://127.0.0.1:8000
回车以后看到了:
Hello, World.

“恩,不错,看来武学的基础你已经掌握了,但是这仅仅是最简单的一招一式,天儿你可知道真正的战斗都是相当复杂的,仅仅依靠这简单的一招一式,是很难应对快节奏的战斗,并且太过复杂的招式依靠自己去创造太难太难,这仅仅是一个Hello,World.如果为师让你写一个像京猫那样的网站,你可知道这个过程有多么的困难,那就像你想以繁星之光照亮夜空一样,大道至简,如此繁琐复杂的招式,已经不适合我们使用了,但是任何武学都是由这最简单的一招一式构成的,无数先辈创造了许多惊天骇地的神功,并且还有一些神器,他们拥有滔天的力量。今日为师便传你真正能让你达到码农境界的昊天塔Django,一旦掌握了它,便能加入一些三流门派,如果能够领悟它的精髓,哪怕是谷阁这种宗派也会有你的一席之地。”,龟叔停顿了一下接着说,“Django是我们Python流派中一个重要的武器,为师刚才跟你说的需求,如果使用WSGI无异于星光照亮夜空,而Django则拥有吸星换月的力量,把漫天的繁星转为皓月之光!”

“为师现在传你召唤Django的口诀,Django乃神器,而我们所在的是神州大陆,召唤图中难免受到路途的影响,可能会召唤失败,如果出现这种问题,你可以使用代理或者VPN来辅助进行召唤,如果没有这两样天材地宝可以多尝试几次,心诚则灵。”龟叔挥手一道灵光,进入了凌天的闹海。

片刻后,凌天坐在电脑前,打开了命令提示符,输入了如下内容:

pip install django

回车后出现了看到了下面的内容:

Collecting django
Using cached Django-1.9.7-py2.py3-none-any.whl
Installing collected packages: django
Successfully installed django-1.9.7

龟叔忍不住点头,心中暗叹,此子果然是百年难得一遇的编程奇才,日后必定能够成为一代宗师。

凌天看到Successfully installed django-1.9.7就明白自己已经拥有了Django,并且还是1.9.7版本的。

“天儿,这本Django文档给你,一定要好好的学习,争取早日掌控这个神器。”龟叔拿出一卷金黄色的卷轴交给了凌天,凌天打开卷轴看了起来。

首先,验证你的django是否安装成功,打开命令提示符,输入:

python -m django --version

回车以后可以看到django的版本,说明安装成功,需要注意的是-m前面是一个杠,--version前面是两个杠。
目前最新版是1.9.7,pip安装的就是最新版。

确认安装成功以后,如果是windows使用cd命令进入到想创建项目的位置,输入如下命令:

django-admin startproject mysite

这条命令是django内置的命令django-admin,startproject告诉它帮我们创建一个名为mysite的文件夹,这个文件夹就代表了我们项目的真实文件夹,名字可以任意取,不要使用中文和特殊符号。
提示:输入django-admin回车,可以看到所有的命令参数
现在我们应该拥有了下面这样的目录结构:

# 这个文件夹相当于项目的根目录,可以重命名为任何你喜欢的名字
mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

manage.py:是一个命令行小工具,作用很大,可以让我们与当前django项目进行交互。
详见文档:https://docs.djangoproject.com/en/1.9/ref/django-admin/

mysite/:内部的mysite,是我们项目中的一个包,也是django为我们创建的一个默认的APP,这个名字决定了我们如何在其他python文件中访问里面的内容,如mysite.urls。

init.py:空文件,它告诉python这个文件夹是一个python的包,有时可以在里面写一些全局配置的代码。
详见文档:https://docs.python.org/3/tutorial/modules.html#tut-packages

settings.py:设置我们的项目,这个文件会告诉django如何工作。

urls.py:设置url的请求拦截地址列表,通过正则表达式来匹配,新增加了其他模块,需要在这个文件中指定。

wsgi.py:WSGI标准的服务器,方便我们开发的时候测试项目,该服务器只适合开发使用,不适合当做线上真实的服务器来使用,因为django是做框架的,不是做服务器的,线上环境应当使用Apache这样的专业服务器。

可以在命令提示符下输入下面的命令来启动项目:

python manage.py runserver

需要注意的是,命令提示符路径需要在manage.py所在的那个目录,才能启动。

小提示:输入python manage.py可以看到manage.py可以接收的所有参数

看到如下信息说明启动成功:

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are app lied.
Run 'python manage.py migrate' to apply them.
July 13, 2016 - 12:13:14
Django version 1.9.7, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

可以通过:http://127.0.0.1:8000/ 来访问我们的项目。
看到下面内容说明我们的django项目已经创建部署成功了:

It worked!
Congratulations on your first Django-powered page.

Of course, you haven't actually done any work yet. Next, start your first app by running python manage.py startapp [app_label].
You're seeing this message because you have DEBUG = True in your Django settings file and you haven't configured any URLs. Get to work!

当然也可以使用下面的两条命令来运行服务器:

# 指定端口
python manage.py runserver 8080
# 指定IP和端口
python manage.py runserver 0.0.0.0:8000

接下来,我们以一个在线投票网站来学习掌握django所有的内容。

首先创建我们的应用,在manage.py所在的目录,使用命令行输入如下命令:

python manage.py startapp polls

这里会创建一个新的polls应用,polls的名字可以随意起,此处建议一致。

此时和我们前面的目录结构中会发生变化:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    polls/
        migrations/
            __init__.py
        __init__.py
        admin.py
        apps.py
        models.py
        tests.py
        views.py

修改polls/views.py文件内容如下:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

这样,我们就拥有了一个简单的视图,我们还需要在polls/urls.py里面配置访问它的路径,django严格遵循MVC设计模式。

在polls/下新建一个urls.py文件:

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
# 相对引用,代表引用和当前文件同级的views.py文件
from . import views

urlpatterns = [
    # 接收一个正则表达式代表访问路径^$表示当前APP的根路径
    # 访问views.py文件中的index方法
    # name 属性可以让我们在网页模板中通过它来获取一些数据,即使我们改动了请求地址或视图,都不会影响到模板中通过命名空间引用的数据
    url(r'^$', views.index, name='index'),
]

编辑mysite/urls.py 告诉django,我们增加了一个新的APP,并且告诉它我们对应的url列表:

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),
]

再次在命令行输入:

python manage.py runserver

启动我们的服务器,然后访问:http://localhost:8000/polls/ 就能够访问到刚才写的views.py里面的index方法了,应该可以看到如下内容:

Hello, world. You're at the polls index.

他的访问顺序如下:

  1. 请求发出以后先匹配mysite/urls.py中的拦截路径,于是以polls开头的被拦截,说明是polls模块的请求,剩余部分被发送给polls.urls
  2. polls/urls.py中有一个拦截以什么都没有开头并且以什么都没有结束的路径,于是匹配到了我们之前的内容,因为我们并没有在polls/后面输入任何的内容,所以空内容被匹配成功。
  3. 调用views.index给我们生成一个视图,并且返回给我们的浏览器,就看到我们的结果了。

大道万千,由简入繁,再由繁入简,这么简单的应用看起来还不如WSGI来的方便,但是如今骨架已成,随着开发的加深,将会领略到django无与伦比的强大能力。

下章预告:吸星换月昊天塔之Django:操作SQLite和MySQL

点击查看更多内容

本文原创发布于慕课网 ,转载请注明出处,谢谢合作

72人点赞

若觉得本文不错,就分享一下吧!

评论

相关文章推荐

正在加载中
意见反馈 去赚学费 帮助中心 APP下载
官方微信

举报

0/150
提交
取消