[关闭]
@breakerthb 2016-10-20T07:25:00.000000Z 字数 2567 阅读 1114

Django视图

Django


Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数(或者generic类)

新建一个项目(project), 名称为 mysite

$ django-admin startproject mysite

备注:如果 django-admin 不行,请用 django-admin.py

运行后,如果成功的话, 我们会看到如下的目录样式 (没有成功的请参见环境搭建一节):

mysite
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

我们会发现执行命令后,新建了一个 mysite 目录,其中还有一个 mysite 目录,这个子目录 mysite 中是一些项目的设置 settings.py 文件,总的urls配置文件 urls.py 以及部署服务器时用到的 wsgi.py 文件, init.py 是python包的目录结构必须的,与调用有关。

新建一个应用(app), 名称叫 learn

进入mysite目录(project根目录)

$ python manage.py startapp learn # learn 是一个app的名称

我们可以看到mysite中多个一个 learn 文件夹,其中有以下文件。

learn/
├── __init__.py
├── admin.py
├── models.py
├── tests.py
└── views.py

注:Django 1.8.x 以上的,还有一个 migrations 文件夹。Django 1.9.x 还会在 Django 1.8 的基础上多出一个 apps.py 文件。

把我们新定义的app加到settings.py中的INSTALL_APPS中

修改 mysite/mysite/settings.py

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'learn',
)

新建的 app 如果不加到 INSTALL_APPS 中的话, django 就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件) , 后面你会学习到它们分别用来干什么.

定义视图函数

打开learn/views.py文件,修改如下:

#coding:utf-8

from django.http import HttpResponse

def index(request):
    return HttpResponse(u"Hello World!")

第一行是声明编码为utf-8, 支持中文。

第二行引入HttpResponse,它是用来向网页返回内容的,就像Python中的 print 一样,只不过 HttpResponse 是把内容显示到网页上。

index()函数,第一个参数必须是 request,与网页发来的请求有关,request 变量里面包含get或post的内容,用户浏览器,系统等信息在里面。

函数返回了一个 HttpResponse 对象,可以经过一些处理,最终显示几个字到网页上。

定义视图函数相关的URL

即规定访问什么网址对应什么内容

打开 mysite/mysite/urls.py 这个文件, 修改其中的代码:

由于 Django 版本对 urls.py 进行了一些更改:

Django 1.7.x 及以下的同学可能看到的是这样的:

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', 'learn.views.index'),  # new
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
)

Django 1.8.x及以上,Django 官方鼓励(或说要求)先引入,再使用:

from django.conf.urls import url
from django.contrib import admin
from learn import views as learn_views  # new

urlpatterns = [
    url(r'^$', learn_views.index),  # new
    url(r'^admin/', admin.site.urls),
]

修改完成后,在终端上运行 python manage.py runserver 我们会看到类似下面的信息

$ 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.

December 22, 2015 - 11:57:33
Django version 1.9, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

我们打开浏览器,访问 http://127.0.0.1:8000/

效果如下:

注意:如果是在另一台电脑上访问要用 python manage.py ip:port 的形式,比如监听所有ip:

$ python manage.py runserver 0.0.0.0:8000

监听机器上所有ip 8000端口,访问时用电脑的ip代替 127.0.0.1

Django中的 urls.py 用的是正则进行匹配的,如果不熟悉,您可以学习正则表达式以及Python正则表达式

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注