主页 > Python结构 > 正文

Django学习心得

Django是python的web开发结构,遵从MVC的规划形式,但在Django中一般称为MTV(model-template-views)。model是数据耐久层,首要寄存实体映射、实体联络以及实体的一些办法。template是表明层,首要是用来显现数据,Django的视图引擎能够将其渲染成HTML并显现。views是事务逻辑层,在Django中充任着链接model与template的桥梁,处理模型并向template提交数据,一起也承受template的恳求和参数,完结相应的逻辑后提交模型修正。

个人认为这儿的MTV和.NET MVC表达的是同一个意思,最大的不同便是在.net里views是表明层,而Django里是事务逻辑层,依据官方文档的意思仅仅对views的了解不一样罢了,其实完全能够当成controller来用。下面我将依据个人的一些了解来介绍一下Django的语法和特征。

1. views和URL

views是事务逻辑层,在Django里边views一般是一个的views.py模块,放在对应的包里。views.py里边是详细的逻辑函数,每一个函数对应着一个或多个模版,为了树立模版与视图的联络,还要有必定的路由机制,所以Django一般在根目录有一个路由程序urls.py。路由由patterns来创立,用正则表达式来描绘,极大地提高了路由机制的灵敏性。

比方:

views.py

def home(request):
    values = request.META.items()
    values.sort()
    return render_to_response('home.html',{"values":values})
urls.py
from django.conf.urls.defaults import *
    urlpatterns = patterns('',('^$',home),)


在这儿request参数是有必要的,可是你能够恣意命名,只需契合标准即可,request包含页面的恳求信息。sender_to_response在django.shortcuts里,所以你还要在前面声明form django.shortcuts import sender_to_response。request.MATE里含有一切的恳求界面信息和用户信息。shor()是对list从小到大排序。返回值的意思便是向home.html模版提交一个values变量。urls中patterns中的元组增加了正则的导向规矩:除掉原地址匹配'^$'者导向home。当然这条件是views.py文件与urls.py在同一个文件夹里边不然就要引证home的命名空间。假如想在url中传递多个值,能够在你想传递的匹配值上面加上括号比方('^([^/]+)/([^/]+) /$', home)就能够匹配/some/some/而some就会被传到处理函数home。相应的home要增加恰当的参数来承受。

2. 模版(Template)

模版在Django中是显现数据的当地,一般为HTML格局,在模版中Django的处理逻辑要写在{% %}中,而要显现的变量要写在{{ }}中。Django的母板页能够用任何文档充任,条件是要用{% block name %}{% endblock %}声明要填充或替换的块,而运用时只需{% extends 母版姓名 %}然后调用相应的块就能够了。

3. 模型

在setting.py 中的database的字典中装备数据库。装备完结后 运用manage.py startapp来创立app在models中编写python代码描绘实体映射。比方:

models.py

class Publisher(models.Model):
    name = models.CharField(max_length = 30)
    website = models.URLField()
 
def __unicode__(self):
    return self.name
 
class Meta:
    ordering = ['name']


models包含在django.db中,里边封装了模型类的通用接口。CharField()是创立varchar型数据,参数有max_length,blank,verbose_name等。别离表明最大长度、是否为空、显现称号。def__unicode__供给了装箱后的默许显现,假如没有设置此函数,默许显现object类型。class Meta规则了模型的默许排序字段。一起Django也供给了外键设置接口,此处以book为例

class Book(models.Model):
     title = models.CharField(max_length = 100)
     authors = models.ManyToManyField(Author) #多对多联络
     publisher = models.ForeignKey(Publisher) #多对一联络
     publication_date = models.DateField(blank = True, null = True) 

创立完结后要在setting.py装备文件INSTALL_APPS中参加app包的途径。

Django支撑codefirst 能够用manage.py syncdb来同步数据库,更新数据库时Django是先生成sql句子然后再履行,在履行前能够运转manage.py validate来查看模型,也能够运转manage.py sqlall books。能够直接声明模型目标来完成数据的刺进save()保存 objects.filter()查找,能够目标调用delete()删去,一起也能够模型调用delete批量删去。同理update也是目标调用单个修正,模型调用批量修正。

4. 集成的子结构

在django.contrib包中有多种附加功用包,现在只了解了admin和auth两种感觉功用很强壮,美中不足的是admin的界面略丑。 admin是Django官方供给的后台办理渠道。能够办理你所增加的app集成了包含增修正查在内的一切常用功用。调用代码也很简单,只需求在urls.py内激活admin的链接即可,装备文件在setting.py里,有需求的话能够自行改动。假如想把app的办理参加里边需求增加如下代码(以Book为例):

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date') #显现次序
    list_filter = ('publication_date',) #过滤列表
    ate_hierarchy = 'publication_date' #激活列表上方的日期查询
    ordering = ('-publication_date',) #排序办法'-'代表倒序
    filter_horizontal = ('authors',) #增加时分的横向挑选过滤(此处假定book和authors 是多对多联络)
    raw_id_fields = ('publisher',) #增加时分的挑选(此处假定publisher和book是一对多联络)
 
admin.site.register(Publisher)
admin.site.register(Author,AuthorAdmin)
admin.site.register(Book,BookAdmin)


5. 缓存机制

个人认为缓存对一个拜访量过多的网站时非常重要的,Django里边供给的缓存办法大致分为三种:全站缓存装备办法,针对视图缓存装备办法,针对数据缓存装备办法。只需修正相关装备文件即可。也能够装其他插件来帮忙缓存,例如memcached。


上一篇:twisted 异步编程教程
下一篇:Uliweb 0.2 发布,灵敏易用的Python Web结构

PythonTab微信大众号:

Python技能交流合作群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854