Django 开发-视图开发

Posted 走自己的路-让别人也有路走

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 开发-视图开发相关的知识,希望对你有一定的参考价值。

Django 开发-视图开发

前面一篇文章说了了怎么建立应用的数据模型,怎样通过管理站点管理应用的数据。这篇文章继续讲一下,怎样将数据在页面上显示。

当用户去访问网站的时候,Django服务器在接收到请求的时候,首先回去匹配URLCONF, 这个在setting.py文件中进行配置

ROOT_URLCONF = 'mysite.urls'

mysite目录下的urls.py内容如下

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^polls/', include('polls.url')),
]

url(r’^admin/’, include(admin.site.urls))的意思是,如果在url中匹配上了admin,就继续匹配admin.site.urls应用的urls,这样可以看到,如果每个应用都维护自己的urls,就能做到各个应用即插即用。
同理url(r’^polls/’, include(‘polls.url’)),表示如果在url中匹配上了polls,表示继续查找polls下面的url文件。在这个项目中,url.py是我新增加的一个文件。

polls/url.py 文件


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

urlpatterns = [
    # ex: /polls/
    url(r'^$', views.index, name='index'),
]

上面的url(),第一个参数表示匹配的模式,第二个参数表示匹配上之后,要执行的view,第三个参数,是给这个url命个名字。所以上面的url说明,如果没有任何数据(^表示匹配字符串的起始、$表示匹配字符串的结束),就行执行views模块的index函数。

所以应该你也猜到了,那我们需要在views模块中加入这个函数。

/polls/views.py

from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse
from models import Question

def index(request):
    output = "hello world"
    #必须返回HttpResponse
    return HttpResponse(output)

先看看效果,是不是感觉很简单。

这里说一下URLCONF的匹配顺序,http://192.168.255.141:8000/polls/, 首先用mysite/urls.py进行匹配,会匹配上 url(r’^polls/’, include(‘polls.url’))条目,所以会继续匹配polls/url.py,因为访问的url中/polls/没有任何内容,所以正好满足url(r’^$’, views.index, name=’index’), ,会执行views模块的index函数。

/polls/views.py

from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse
from models import Question

def index(request):
    def index(request):

    output = "<title>Hello,goodnight! </title><h1>fighting</h1>"
    return HttpResponse(output)

直接把网页代码写到python代码里面就麻烦了,更该个网页还得更改代码,所以别急,肯定会有更好的办法,其中一个好办法就是使用html模板。

首先在polls 目录下面创建一个templates目录,后面再说为什么要创建templates目录。然后再templates目录下创建个index.html。

/polls/templates/index.html

<title> view template!</title>
<hi>templates?</hi>

重写前面views模块的index
/polls/views.py

from django.shortcuts import render

# Create your views here.

def index(request):

    return render(request, 'index.html')

这里直接用了快捷键的方式使用模板,其实还可以使用django.template 模块的RequestContext, loader,同样可以实现该功能。看看效果

接着说前面留下的问题,为什么需要在polls下创建templates目录。
那是跟django查找模板的方式有关,django查找模板的方式是依次查找setting.py中INSTALLED_APPS注册的各种应用目录下template目录。

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

好吧,视图就讲这么多了,这里就只大概讲一下实现框架。

以上是关于Django 开发-视图开发的主要内容,如果未能解决你的问题,请参考以下文章

python测试开发django-73.django视图 CBV 和 FBV

python3开发进阶-Django视图(View)的常见用法

Django开发笔记

Django_类视图_MTV模式

Django_类视图_MTV模式

Mac系统 + Python + Django之开发一个发布会系统Django视图