Django学习心得

摘要:
Django是一个python web开发框架,它遵循MVC设计模式,但在Django中通常称为MTV(模型模板视图)。模型是数据持久层,主要存储实体映射、实体关系和实体的一些方法。模板是一个表示层,主要用于显示数据。Django的视图引擎可以将其渲染为HTML并显示。视图是业务逻辑层,在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来创建,用正则表达式来描述,极大地提高了路由机制的灵活性。

比如:

  1: views.py
  2: 
  3: def home(request):
  4:     values = request.META.items()
  5:     values.sort()
  6:     return render_to_response('home.html',{"values":values})
  7: 
  8: urls.py
  9: 
 10: from django.conf.urls.defaults import *
 11: 
 12:     urlpatterns = patterns(‘’,(‘^$’,home),)
 13: 

在这里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代码描述实体映射。比如:

  1: models.py
  2: 
  3: class Publisher(models.Model):
  4:     name = models.CharField(max_length = 30)
  5:     website = models.URLField()
  6: 
  7: def __unicode__(self):
  8:     return self.name
  9: 
 10: class Meta:
 11:     ordering = ['name']
 12: 

models包含在django.db中,里面封装了模型类的通用接口。CharField()是创建varchar型数据,参数有max_length,blank,verbose_name等。分别表示最大长度、是否为空、显示名称。def__unicode__提供了装箱后的默认显示,如果没有设置此函数,默认显示object类型。class Meta规定了模型的默认排序字段。同时Django也提供了外键设置接口,此处以book为例

  1: class Book(models.Model):
  2:     title = models.CharField(max_length = 100)
  3:     authors = models.ManyToManyField(Author) #多对多关系
  4:     publisher = models.ForeignKey(Publisher) #多对一关系
  5:     publication_date = models.DateField(blank = True, null = True)
  6: 

创建完成后要在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为例):

  1: class BookAdmin(admin.ModelAdmin):
  2:     list_display = ('title', 'publisher', 'publication_date') #显示顺序
  3:     list_filter = ('publication_date',) #过滤列表
  4:     ate_hierarchy = 'publication_date' #激活列表上方的日期查询
  5:     ordering = ('-publication_date',) #排序方式’-‘代表倒序
  6:     filter_horizontal = ('authors',) #添加时候的横向选择过滤(此处假设book和authors 是多对多关系)
  7:     raw_id_fields = ('publisher',) #添加时候的选择(此处假设publisher和book是一对多关系)
  8: 
  9: admin.site.register(Publisher)
 10: admin.site.register(Author,AuthorAdmin)
 11: admin.site.register(Book,BookAdmin)
 12: 

截图如下:

clip_image002

clip_image004

5. 缓存机制

个人认为缓存对一个访问量过多的网站时非常重要的,Django里面提供的缓存方式大致分为三种:全站缓存配置方式,针对视图缓存配置方式,针对数据缓存配置方式。只要修改相关配置文件即可。也可以装其他插件来协助缓存,例如memcached。

免责声明:文章转载自《Django学习心得》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇36. 有效的数独友盟+UAPM应用性能报告:Android崩溃率达0.32%,OPPO 、华为、VIVO 崩溃表现良好下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Django安装和web框架原理

Django安装和web框架原理 在PyCharm中安装 在cmd中输入 django-admin startproject 项目名 如果报错 不是内部或外部命令,也不是可运行的程序 需要添加环境变量 运行Django项目 切换到项目名目录下 python manage.py runserver 或者 python manage.py...

django集成ansibe实现自动化

动态生成主机列表和相关参数 def create_admin_domain(admin_node): workpath = BASE_DIR + '/tools/ansible/script' hosts_file = BASE_DIR + '/tools/ansible/host/' + createhostfile() yml...

Django的Settings中Templates的路径设置

## mysite/mysite/settings.py## mysite是项目名TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templa...

06 django视图层

视图层   视图就是一个函数,请求过来后要做什么事情都在这个函数里,也就是具体处理请求的功能。   熟练掌握两个视图层对象:请求对象(request)和响应对象(HttpResponse)。 HttpRequest对象 1 from django.shortcuts import render,redirect,HttpResponse 2 from...

Django的View(视图)

Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“...

django项目部署到centos

服务器是使用的阿里云的centos 7.6 项目使用的是 Python3.9.5 + Django 3.2.4 目标:将django项目部署到centos上,centos + Python + django + uwsgi + nginx Python下载地址:https://www.python.org/ftp/python/3.9.5/ nginx下载...