django框架流程解析

以后的文章可能都会发在github博客上了,现在暂时还懒得弄域名和服务器。地址: http://jameeeees.github.io/

最近在学习django的框架 现在将它梳理一番

上图是我在网上看到的django流程图  来自 http://breezedeus.github.io/2015/05/18/breezedeus-django.html
现在我将综合代码来解析这一流程

假设我现在写了一个网页 该网页(project)的名称为my_blog
首先当我们输入一个网址时
例如127.0.0.1:8080/blog/login/
首先这个网址会通过当前project主文件下的setting.py中的设置来找到跳转网页的集合。
setting.py中主要包括:
                              APPS-应用;
                              Middleware-中间件;
                              Template-模板;
                              Database-数据库;
                              ROOT_URLCONF='my_blog.urls';
之后我们会对网页做很多的工作,比如新建一个app,比如增添自己的模板,比如更换不同的数据库。无论什么操作,当执行之后,别忘了回到setting.py中来修改。因为这个文件就相当于一个索引,网页解析先通过它,假如没有在这里更改,那么程序将无法通过这个索引找到需要的目标文件。

跳转到my_blog.urls实际上是跳转到了my_blog文件下的urls.py文件中,urls.py中的代码主要如下:
                              urlpatterns=[url(r'^admin/',include(admin.site.urls)),     
                               <span style="white-space:pre">		</span>  url(r'^blog/',include('my_blog.views.first_page'))
                          <span style="white-space:pre">		</span> ]




需要说明的是,假如我输入的url是127.0.0.1:8080/polls/login/,传入setting.py的只是127.0.0.1:8080之后的字符串。可以看到,假如网址的开头部分和括号中的正则表达式相符的话,即跳转到my_blog的一个views中的first_page方法中去。正则表达式中^表示只在字符串的开头匹配。

确定了url对应的文件,那么接下来就要跳转到views中去了。
views,即为视图,就是返回给用户的html界面,此时views会根据Model和Form以及Template来确定这个views的样式

views文件的代码形式大致如下:    
from django.http import HttpResponse
def first_page(request):
<span style="white-space:pre">	</span>return HttpResponse('<p>hello world</p>')
def ...



可以看到 在views中有很多函数,第一个就是之前我们在urls.py中已经见过的first_page函数,它会返回一个HttpResponse。关于request的内容请参见《图解Http协议》,在此不再赘述。

至此,输出的views只是单薄的文字,一行hello world,这还不是我们所见到的网站。回到一开始的那张图片,我们可以看到,有三个模块为views提供了不同的资源。

我们先来说说模型(Model)
假设我们使用的是MySQL数据库,在传统的MySQL中,数据模型是表。在django下,一个表为一个类。表的每一列是该类的一个属性。在models.py中,我们创建一个只有一列的表,即只有一个属性的类:
from django.db import models

class Character(models.Model):
    name = models.CharField(max_length=200)
    def __unicode__(self):
        return self.name


类Character定义了数据模型,它需要继承自models.Model。在MySQL中,这个类实际上是一个表。表只有一列,为name。可以看到,name属性是字符类型,最大长度为200。
CharField适用于较短的的字符串字段,假如文本很长,应该用TextField。
类Character有一个__unicode__()方法,用来说明对象的字符表达方式。
之前我们说了,根据前面的图,Model是提供给views的,下面我们将在views中添加Model,下面是一个例子:
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from west.models import Character
def staff(request):
    staff_list = Character.objects.all()
    staff_str  = map(str, staff_list)
    return HttpResponse("<p>" + ' '.join(staff_str) + "</p>")



这样,我们就能通过views使用Model并在最终的网页上看到它了

再说说模板 Template
我们所需要的模板同样也需要在setting.py中说明,你可以把setting.py当作一个类似头文件的东西,这些东西都需要在头文件中声明。大概形式是下面这样:
# Template dir
TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates/west/'),
)

这就告诉了django去哪里寻找这个模板 是在 templates/west/这个路径下
同时我们声明了模板之后,我们就要使用它。还记得开头的图片吗,模板(Model)是给视图(Views)使用的。
我们在Views中这样使用它:
# -*- coding: utf-8 -*-
#from django.http import HttpResponse
from django.shortcuts import render

def templay(request):
    context          = {}
    context['label'] = 'Hello World!'
    return render(request, 'templay.html', context)


这个模板的名字叫做 templay.html

再来回顾一下整个流程。west/views.py中的templay()在返回时,将环境数据context传递给模板templay.html。Django根据context元素中的键值,将相应数据放入到模板中的对应位置,生成最终的http回复。
这一模板系统可以与Django的其它功能相互合作。我们可以从数据库中提取出了数据。如果将数据库中的数据放入到context中,那么就可以将数据库中的数据传送到模板。


表单的部分暂时还没有接触,不过用法跟模板差不多。
上述就是django框架的大致运作流程

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页