首页
学习
活动
专区
工具
TVP
发布

史上最全Django知识总结!神级程序员强推:掌握此文就掌握Django

一、视图函数(views.py中的函数):第一个参数类型是HttpRequest对象,返回值是HttpResponse对象

二、URLconf(urls.py):绑定视图函数和URL (urlpatterns只有一个空串时django显示欢迎页面)

(r'^time/plus/(d)/$', hours_ahead),urls.py用圆括号从正则中提取数据;

def hours_ahead(request, offset):...,views.py视图函数的第二个参数是从url中提取的字符串

三、调试,在视图的任何位置插入一个assert False来触发django的出错页

给大家推荐一个群:Python学习: 五八八零九零九四二,每天分享Python直播学习,群里有各种教程和PDF文件,已经欢迎的安装,欢迎你的加入。

四、模板引擎

1.模板是一个文本,用于分离文档的表现形式和内容。模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。模板通常用于产生HTML,但是 Django 的模板也能产生任何基于文本格式的文档。大家可以加下,里面遍布了全国各地的学习者!为大家提供一个交流平台,不管平时有碰到什么BUG或者学习过程中卡壳,找不到人替你解决?那么就进来吧,里面热心的小伙伴还是非常多的,管理也是挺好的,有什么问题,他如果有时间都能给大家解决,我觉得是一个非常不错的交流平台,没事也可以和大家扯扯公司的事学校发生的趣事,群文件已经上传了好多G的资料,PDF,视频 安装工具,安装教程都是有的,为了大家的学习能更进一步!也为了大家能愉快的交流,讨论学术问题!所以你还在等什么呢?好了马上给大家带来正文!

2.用两个大括号括起来的文字(例如{{ person_name }} )称为变量(variable) 。这意味着将按照给定的名字插入变量的值。

3.被大括号和百分号包围的文本(例如 {% if ordered_warranty %} )是 模板标签(template tag) 。标签(tag)定义比较明确,即:仅通知模板系统完成某些工作的标签。

4.filter 过滤器,它是一种最便捷的转换变量输出格式的方式。如这个例子中的{},我们将变量ship_date 传递给date 过滤器,同时指定参数”F j,Y”。date过滤器根据参数进行格式输出。

5.模板使用

1>可以用原始的模板代码字符串创建一个Template 对象,Django 同样支持用指定模板文件路径的方式来创建Template 对象;

2>调用模板对象的render 方法,并且传入一套变量context。它将返回一个基于模板的展现字符串,模板中的变量和标签会被context 值替换。

python manage.py shell 进入交互模式

补充:

1.setting.py中INSTALLED_APPS 告诉 Django 项目哪些 app 处于激活状态,可以激活对应app下面的模型

2.在app的目录下添加management/commands目录,django就会自动的为commands目录下的每个模块自动注册manage.py命令,可以用python manage.py command_name来调用,具体命令的文件编写格式如下:

这个项目做完以后推出进阶篇.....

1.django模板的html自动转义

在django里默认情况下,每一个模板自动转意每一个变量标签的输出。 尤其是这五个字符。

> 被转意为 >

' (single quote) 被转意为 '

" (double quote) 被转意为 "

& 被转意为 &

另外,我强调一下这个行为默认是开启的。 如果你正在使用django的模板系统,那么你是被保护的。

关闭自动转义

对于单独变量:

$ ./manage.py syncdb --database=users

syncdb会把所有的model都同步到users数据库,所以不一定是我们想要的(可以用router控制入库到user数据库的app)

syncdb也会检索对应app的/sql/.sql(modelname小写),并会在正常syncdb后执行这些sql语句

3.数据库路由 database router

1>setting.py的DATABASES加入数据库配置就不说了

2>创建myapp/myrouter.py文件,并写入如下代码(每个函数的具体含义可看官网说明)

4.关于自增和联合索引

“很容易明白,第一个参数就直接添入要使用的view方法,第二个args里边顺序填入方法的参数,(extra_context也从这里传入)然后剩下的就全部交给django去完成拉。于是我们就可以放心的修改url.py里的url配置,不

必再担心有什么地方没修改网站出错啦”

说白了,reverse()就是屌丝views的逆袭,从views里面的方法反解url,该函数返回的字符串就是一个url串。用它的好处是修改urls.py里面的url可以不用修改views文件中的HttpResponseRedirect()参数。

12.djang多进程和多线程的问题

django单进程多线程:每个线程的数据库操作会用不同的连接,如果某进程有60个线程,每个线程都有对同一个数据库的操作,那么该进程会有60个对该数据库的连接(小心mysql最大连接数达到上限)。就测试结果来看,数据库操作结束后(线程还没退出)几分钟,连接会自动断开(说个跟本话题无关的,tmpThread.setDaemon(True)考虑清楚再用,今天线程抛异常就跟这个有关Exception in thread Thread-6 (most likely raised during interpreter shutdown))

django多进程:如果在某个django的进程里面用multiprocessing创建新的进程,则子进程会继承父进程的数据库连接socket,那么父子进程同时做数据库操作时会出错(数据库socket连接会抛出异常“数据库已不在”/"查询过程中出错")

如果在某个django的进程里面用os.popen()或者subprocess.Popen()创建新的django进程(比如启动一个django的command),则,子进程虽然会继承父进程的数据库连接socket,但也会自己构建属于自己的数据库连接(跟从bash下启动进程一样嘛,可以预料到的),不会有上述问题(顺便说一句,subprocess才是正道,什么os.popen()、popen2.*已不是官方倡导的多进程用法;multiprocessing倒不至于被人遗弃,因为它是类似于多线程threading模块的多进程模块,和前面的那些多进程模块适用性不一样)

16.或者,OR语法

select * from xx where a = 1 or a = 2;

在django中的实现:

rts = XX.objects.filter(a = 1) | XX.objects.filter(a = 2)

或者

rts = XX.objects.filter(Q(a = 1) | Q(a = 2))

或者| 并且& 都可以用

谢谢阅读!阅读此篇需要掌握一定基础!!如果你看不懂就把基础打好把!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171219A0GNWQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券