简介:本文的首席执行官Note将向您介绍Django与之相关的内容。我希望这对每个人都会有所帮助。让我们来看看。
Sqlalchemy使用两个级别。1是使用SQL表达式。坦率地说,您可以让您在Python中编写SQL。2是它的ORM。ORM使用会话。它可以在多个过程中管理会话和通过会话。操作业务自己。写作是通常的事务脚本(域模型通常称为贫血)。实际上的编码通常与1和1混合。
Django通过中间件的中部隐藏了连接/交易管理的概念,并且写作相对简单。它接近爪哇交通拥堵的交通拥堵。内容中没有SQL表达式级别。
但是,在可用于达到Sqlalchemy高峰的ORM中,它没有以其他语言看到。Ruby具有Sqlalchemy的阴影。
(1)烧瓶
烧瓶确实是“轻”。这确实是微框架。从Django到烧瓶的开发人员将确定
烧瓶是免费的,灵活的,并且具有强大的可扩展性。可以广泛使用第三方库的选择。您可以在开发过程中结合自己喜欢的车轮。它也可以与最受欢迎的Python库结合使用。
简介很简单,即使没有许多网络开发经验,您也可以快速建立网站
非常适合小型网站
非常适合开发Web服务API
没有开发大型网站的压力,但是代码架构需要由其本身设计。开发成本取决于开发人员的能力和经验
各个方面的表现等于或优于django
django自己的或第三方赞美功能,烧瓶总是找到第三方图书馆,就像第三方图书馆一样
烧瓶是灵活开发的,python基本上像烧瓶一样,但可能与django混合
烧瓶和关系数据库的组合并不比Django弱,并且其与NOSQL数据库的合作远胜于Django
烧瓶比django更具Pythonic,并且与Python的哲学更一致
(2)Django
Django太重了。除了网络框架,使用ORM和模板引擎,灵活性和自由度不够高
Django可以开发小型应用程序,但总会有一种“用牛刀杀死鸡”的感觉
Django自己的ORM非常好,全面评估略高于Sqlalchemy
Django自己的模板引擎简单易用,但其强大而全面的评估略低于Jinja
Django自己的ORM也使Django与关系数据库之间的关系过高。如果您想使用NOSQL数据,例如MongoDB,则需要选择合适的第三方图书馆。
Django目前支持非官方模板引擎(例如Jinja)
Django自己的数据库管理应用程序受到了良好接收
Django非常适合开发企业级别的网站:快速,可靠,稳定
Django成熟,稳定且完美,但与烧瓶相比,Django的整体生态相对封闭
Django是Python Web框架的先驱。有很多用户。第三方库是最丰富的。最好的Python图书馆。
Django也更容易开始。开发文件是详细的,完美的,丰富的相关信息
它并没有说Django-CMS是一个内容管理系统,而是它实际上是一个基本的开发平台。不像常规CMS,Django-CMS不是包装盒中使用的产品,也不提供许多内置模板和主题,允许用户快速构建一个网站。相反,可以使用Django-CMS要求用户熟悉Django,其构造过程非常“像”,这是与Django一起开发的过程。
本文总结了一日文档阅读经验。
从结构上讲,django-cms包含以下内容:
1.基本框架:
多站点支持 - 嗯,实际上是django
多语言支持。没有不同语言的页面。
页面管理。后台视觉支持,包括页面结构和插件(插件)的配置
可扩展菜单系统
集成/继承从Django模板系统。ADD占位符。
基于插件的扩展机制的集成-Django应用程序(APP)。
2.一组插件
文件
文本
谷歌地图
推特
闪光
视频
3.一组模板标签
show_menu
show_breadcrumb
show_submenu
占位符
... ... ...
4,其他
SEO支持
虚拟根(软根)
站点地图
(内容)版本历史记录功能
Em
在使用方面,Django-CMS的主要客户应该是程序员,而不是最终用户或设计师。这是由其部署过程确定的。当使用Django-CMS开发网站时,通常随后是以下步骤:
使用标准的django-admin.py startproject建立标准Django项目
modify settings.py,installed_apps添加了CMS,菜单和其他插件,Template_Context_Processors,语言和其他CMS_MOCKS。
使用manage.py syncdb生成数据库
开发模板和样式
manage.py runserver启动
然后使用背景系统构建目标网站结构
如果您发现无法满足需求,则可以访问Django-CMS网站以检查插件库或根据其扩展机制开发自己的插件。这纯粹是基于标准Django应用程序的开发(应用程序),以及与Django-CMS的集成。
尽管Django-CMS提供的功能不大,但它提供了一个非常好的基础架构,从而使开发人员可以快速构建产品。从这个角度来看,它似乎更适合增强的Django。
根据朋友和同事的强烈建议,我最近开始看到Python。实际上,这主要是因为Python是2007年的一种语言。我该如何与时代保持同步?最近,我似乎一直都有一定的经验。我希望与您分享。
我不打算从PY的语法基础开始,并直接谈论Django的经历:
要首先与Django联系,您需要了解这可能是他的榜样。建立模型就是一切。对于Java的人员来说,这仍然非常有吸引力(当然,这是动态语言的儿科部门)。看一个模型的示例:
懒惰,将用户直接带到django-admin中
类用户(型号。模型):
用户名= models.charfield(_(_('用户名'),maxlength = 30,unique = true,value_list = [validator.isalphanuseric])
first_name = models.charfield(_(_('firan name'),maxlength = 30,空白= true)
last_name = models.charfield(_(_姓氏'),maxlength = 30,空白= true)
电子邮件= models.emailfield(_(_(_mail地址'),空白= true)
密码= models.charfield(_(_('密码'),maxlength = 128)
元类:
订购=('用户名',)
每个属性都是库表的字段,它非常简单明了。模型提供了许多类型的字段相似的电子邮件field.different字段具有不同的设置,您可以看到相应的原始设置。
模型类内还有类元。此类的属性制定了该表的某些访问策略,例如这里的排序。可以使用Model..ok的_Meta属性获得MetAclass中的属性。那么,该模型如何才能实现数据库的灵活操作table.LET看看。
首先分析/django/django/db/models/base.py,其中包含诸如model.model之类的定义:model:
看看班级定义的第一行,第一行足以让我考虑一段时间:
类模型(对象):
__ metaclass__ = modelbase
模型使用新样式类定义。对于此内容,您可以让狗看。第一行是__Metaclass_属性的定义。此属性的值是modelbase,它是一个类。该课程的一个例子是此类,我相信您很头晕。然后以这种模型来解释,如果没有__ metaclass__,则实例是一个正常的过程。通过此属性过程,将会有更改:
第一个呼叫basemodel .__新__(CLS,名称,基础,attrs)。返回值是类型类型,然后使用此类创建一个实例。实际上,basemodel是模型的元模型,用于制定模型类的最终外观。有关Meta类的更多信息,请参阅此处。
然后我们的眼睛被转移到基本模型班上,我有一种直觉。梅塔(Meta),班级可以最终使用_meta将其带到这里。看一下基本模型的定义。有点长:
类Modelbase(类型):
“所有模型的元类”
def __new __(Cls,Name,Bases,Attrs):
#如果这不是模型的子类,请不要做任何特别的事情。
如果名称=='模型'或不过滤(lambda b:issubclass(b,model),基地):#1 1
返回超级(modelbase,cls).__新__(CLS,名称,基础,attrs)
#创建类。
new_class = type .__ new __(Cls,Name,bases,{'__module__':attr.pop('__ module__')})#2 2 2
new_class.add_to_class('_ meta',options(attr.pop('meta',none)))#3
new_class.add_to_class('dionNotexist',types.classtype('do notexist',(objectdoesnotexist,),{}),{})
#建立完整列表#4
对于基地的基础:
#todo:检查“ _Meta”的存在是hackish。
如果在dir(基本)中的'_meta':
new_class._meta.parents.append(基础)
new_class._meta.parents.extend(base._meta.parents)
model_module = sys.modules [new_class .__模块__]
如果getttr(new_class._meta,'app_label',none)无:
#通过查找一个级别来找出app_label。
#对于'django.contrib.sites.models',这将是“大小”。
new_class._meta.app_label = model_module .__名称__。拆分('。')[-2]#5
#如果我们有Alream创建此类,请尽早救助。
m = get_model(new_class._meta.app_label,name,false)#6
如果m不是没有:
返回m
#将所有属性添加到类中。
对于obj_name,obj in attr.items():
new_class.add_to_class(obj_name,obj)#7 7
#ADD字段从父母那里继承
对于new_class._meta.parents中的父母:
for parent._meta.fields:
#仅在此课程死亡时添加火场。
尝试:
new_class._meta.get_field(field.name)
除了fielddoesnotexist:
field.contribute_to_class(new_class,field.name)#8
new_class._prepare()
register_models(new_class._meta.app_label,new_class)#9
#由于进口的发生方式(递归),我们可能会或可能不会
#该模型以框架注册的第一类。
#只能是每个型号的一类,因此我们必须始终返回
#注册版本。
返回get_model(new_class._meta.app_label,name,false)#10
让我们简要分析此代码:
1.检查课程是否是模型的子类。如果没有,如果您不进行任何治疗,它将直接传递给父过程,这等同于正常处理类别。请注意,当多个继承继承时,超级应严格使用它。
2.使用类型创建类,创建一个普通的模型类
3.这句话非常重要。add_to_class是模型中的类方法。实际上,此方法将其传递到名称和值中,以将类属性添加到模型中。看到,原始的神奇_meta来自。add_to_class方法很简单。查看其代码:
def add_to_class(CLS,名称,值):
如果名称=='admin':
assert type(value)== types.classtype,“%s model MST的%r属性为类,而不是%s对象”%(name,cls ._____,type(value))
值=管理
如果hasattr(value,'contrute_to_class'):
value.contribute_to_class(CLS,名称)
别的:
setttr(CLS,名称,值)
add_to_class = classMethod(add_to_class)
最后一句话是将此方法提出为类方法。特征是该方法的第一个参数是类。实际上,ClassMethod是装饰器。2.4之后,您可以使用@进行简要介绍。我在这里要提及的是他对管理员的特殊处理。尽管管理模块不在管理模块中,但仍与管理员的内容绑定。以下是“ contrute_to_class”方法的特殊处理。为什么django不会得到脱杯点?也将其包装成选项,一个是在基本模型(该元的包装)中制成的,另一个是在add_to_to_class方法中制成的。这有点不合理。我可能不太了解。我不知道他的意图。
4.元的集成,此类选项提供继承方法
5.获取Applabel,也就是说,将模型的名称分为第二个。我喜欢诸如2之类的设置
6. GET_MODEL方法将其输入缓存。
7.取出所有类属性,然后再进行一次,然后将一般属性安定回。如果此属性具有contrute_to_class,则可以执行该属性(可以完全这样的处理。
8.每个文件调用自己的控制_to_class方法用于特殊处理
9.输入缓存,我们暂时致电缓存。
10.很明显地看到注释。我们必须将模型放在缓存中。
结论:以上是首席CTO注释给所有人提出的Django的所有内容。我希望这对每个人都会有所帮助。如果您仍然想了解有关此信息的更多信息,请记住收集并关注此网站。