`
wcxt2012
  • 浏览: 23644 次
  • 性别: Icon_minigender_1
  • 来自: 甘肃
社区版块
存档分类
最新评论

django备忘

阅读更多

转自:http://blog.csdn.net/kevin6216/article/details/6908027

django备忘


目录(?)[-]

  1. django注释
  2. django过滤器
  3. locals
  4. blocksuper获取父级页面对应标签内容
  5. extends basehtml
  6. MTV 区别于MVC模式
  7. managepy 常用命令
  8. django modles之添加修改删除数据
    1. 删除一条或多条数据
  9. django modles之objects数据管理器数据筛选
    1. 1equal
    2. 2__like __in__iexact __exact__contains__gt__gte__lt__lte__startswith__istartswithsqlite中使用__endswith__iendswithsqlite中使用__rangestartend
    3. 3双下划线的特殊使用上下级关系user类__user_id属性
    4. 4objectsget 获取单个对象
    5. 5order_by 排序
    6. 6限制返回的数据
  10. model 层修改字段时如何同步到数据库
  11. django 之自定义模板
  12. django 之urls配置技巧
    1. URL 命名组方式
    2. 传递额外的参数到视图函数中

1. django注释

{#。。。。。#}

2. django过滤器

{{ name | lower }},将name变量的值转化成小写; {{ my_text|escape|linebreaks }}  ,转移文本为html,再转化每行到<p>

需要参数的过滤器:{{ bio|truncatewords:"30" }} 这个将显示变量 bio 的前30 个词。过滤器参数总是使用双引号标识。 

3. locals()


def method(request):

    now = datetime.datetime.now()

    return render_to_response('index.html',locals())

    return render_to_response('index.html',{'time':now}) 两种写法都可以,locals() 将局部变量都组织成dict 格式,懒人专用

4. {{block.super}}获取父级页面对应标签内容

(1){%block title%}本页面的title,{{block.super}}{%endblock%}======》》》<title>本页面的title,父页面的title</title>

(2)一个页面中不要出现多个同名的block,否则模板引擎解析将混乱

5. {% extends 'base.html' %} 

(1)extends 标记只能放在最顶部,否则失效

(2)extends 后面跟:一个字符串或者是一个变量

(3)extends 对传入的模板名称,加载方式和get_template(),render_to_response()相同,都是以settings中TEMPLATES_DIRS 为前缀

6. MTV (区别于MVC模式)

 Django 关注模型(Model)、模板(Template)和视图(Views),Django 也被称为 MTV 框架 。

在 MTV 开发模式中:

M 代表模型(Model),即数据存取层。该层处理与数据相关的所有事务:如何存取如何确认有效性、包含哪些行为以及数据之间的关系等。

T 代表模板(Template),即表现层。该层处理与表现相关的决定:如何在页面或其他类型文档中进行显示。

V 代表视图(View),即业务逻辑层。该层包含存取模型及调取恰当模板的相关逻辑。可以把它看作模型与模板之间的桥梁。 

7. manage.py 常用命令

python manage.py validate 验证模型是否有错误

python manage.py sqlall books 查看生成的sql代码,sqlall 命令并没有在数据库中真正创建数据表,只是把 SQL 语句段打印出来

python manage.py syncdb 执行数据库同步,生成表结构

python manage.py runserver lcalhost:8080 启动django应用程序

8.django modles之添加,修改,删除数据

添加/更新一条数据: (1)实例化一个model类(2)调用该实例的save()方法,当二次调用save时,不会添加只会修改数据

获取一张表的所有数据:类名点objects.all()

模块的字符串表现(必须返回字符串):

class Author(models.Model):

    name = CharField(max_length=30)

   .................................................................

    def __str__(self):

        return self.name

删除一条或多条数据:

l1 = Author.objects.all()

l1.delete() 删除所有Author表数据,也可以获取单挑删除

9. django modles之objects数据管理器(数据筛选)

(1)equal

Author.objects.filter(name='kevin') 对应的sql语句是:select name,.... where name='kevin',为什么不用select *,而具体指明字段呢,在python界里有一信条:“ 明确比不明确来的好 ”

filter(name='kevin',[key=value])可以传多个类似的参数,相应会生成多个and 条件后查询

(2)__like, __in,__iexact, __exact,__contains,__gt,__gte,__lt,__lte,__startswith,__istartswith(sqlite中使用),__endswith,__iendswith(sqlite中使用),__range(start,end)

Author.objects.filter(name__contains='kevin') ==>select name,.... where name like '%kevin%'

Author.objects.filter(name__in=['kevin','miao']) ==>select name,.... where name in('kevin','miao')

Author.objects.filter(name__iexact='kevin')==>select name,.... where name like 'kevin')

Author.objects.filter(name__iexact='kevin')==>select name,.... where name = 'kevin')

Author.objects.filter(name__iexact='kevin')==>select name,.... where name like '%kevin%')

 

Entry.objects.filter(id__gt=4) ==> SELECT ... WHERE id > 4;

Entry.objects.filter(id__gte=4) ==> SELECT ... WHERE id >= 4;

Entry.objects.filter(id__lt=4) ==> SELECT ... WHERE id < 4;

Entry.objects.filter(id__lte=4) ==> SELECT ... WHERE id <= 4;

Entry.objects.filter(headline__startswith='Will') ==> SELECT ... WHERE headline LIKE 'Will%';

Entry.objects.filter(headline__endswith='Will') ==> SELECT ... WHERE headline LIKE '%Will';


start_date=datetime.date(2005,1,1)

end_date=datetime.date(2005,3,31)

Entry.objects.filter(pub_date__range=(start_date,end_date))

SELECT ... WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31';

https://docs.djangoproject.com/en/dev/ref/models/querysets/#std:fieldlookup-exact

(3)双下划线的特殊使用(上下级关系)user(类)__user_id(属性)

class Test():

       id=models.IntergerField(primarykey=true)

       user = models.ForeignKey(User, core=True)

class User():

      user_id=models.IntergerField(primarykey=true)

      user_name=models.CharField(maxlength=500,null=True)

这样的话,我们在别处就可以通过Test.user_id来访问User的主键:

result=Test.objects.get(id=1)

result.user_id 是可以的

result.user.user_id也是可以的。

有一点比较奇怪,也是笔者不太明白的是,如果要在对Test对象进行查询的时候,对user_id进行限制的话,不能用点操作符了,而必须使用

双下划线,比如说要取user_id等于1的Test对象,则使用下面的语句:

Test.objects.filter(user__user_id=1)

分析可以发现,在查询的条件当中,所有的这种上下级的操作符都是双下划线,比如说__gt __lt __year __month 再到这里的user__user_id

(4)objects.get 获取单个对象

Author.objects.get(name='kevin') 如果结果集中有多个name=‘kevin’ 的数据,或者没有找到数据,将会抛出异常

(5)order_by 排序

Author.objects.all().order_by('name') ,‘ -name ’方序(desc)

可以在模型中定义内部类Meta,并指明ordering,缺省情况下将使用此排序:

def Author(models.Model):

    name = CharField(max_length=30)

    ................................................................

    def __str__(self):

        return self.name

    class Meta:

        ordering = ["name"] 

(6)限制返回的数据

Author.objects.all()[0] ===>> select name,.... from Author limit 1

10. model 层修改字段时如何同步到数据库

python manage.py syncdb 只能创建table,无法修改,即当model变动时,syncdb不能及时影响到数据库

解决办法:

(1)手动修改数据库

(2)进入数据库交互命令界面,进行alter操作

(3)使用django-evolution 的命令:

python manage.py evolve --hint --execute

安装方式: easy_install -U django_evolution

前提是安装了setuptools,并把Scripts目录添加到环境变量

 

11. django 之自定义模板

 

settings 中 TEMPLATE_DIRS 配置设置了Django 加载模板的目录列表。 要自定义Django 的管理模板,只需要拷贝 Django 发行版中的整个管理模板到你在 TEMPLATE_DIRS里设置的模板目录里。 管理站点的头部区域在模板 admin/base_site.html 里。缺省情况下,这个模板在 Django管理模板目录 django/contrib/admin/templates 里,你可以在Django 的安装 目录找到它,例如Python 的 site-packages 目录或者你安装的其他目录。要自定义 这个 base_site 模板,把这个模板拷贝到你的模板目录下的 admin 子目录。 例如,假定你的模板目录是 "/home/mytemplates" ,拷贝 django/contrib/admin/templates/admin/base_site.html 到 /home/mytemplates/admin/base_site.html 。不要忘了有 admin 子目录。 然后,编辑这个新 admin/base_site.html 文件,替换你自己站点的名称上去。 备注 每个Django 缺省的管理模板都可以重载。要重载一个模板,就象 base_site.html 一样的去做:把它从缺省目录中拷贝到你自己的模板目录中然后修改它。

12. django 之urls配置技巧

##########################

from mybook.views import method1, method2, method3

urlpatterns = patterns('发现这里一般都是空的',
    (r'^m1/$', method1),
    (r'^m2/$', method2),
    (r'^m3/$', method3),

##########################
这种配置如果views过多会导致难于阅读和管理

##########################

#from mybook.views import method1, method2, method3

urlpatterns = patterns('mybook.views',
    (r'^m1/$', ‘method1’),
    (r'^m2/$', ‘method2‘),
    (r'^m3/$', ’method3’),

##########################

提取出一个公共视图前缀 mybook.views,不要在前缀后面跟着一个点号("." ),也不要在视图字符串前面放一个点号("." ), Django 会自动处理它们.

推荐使用这种方式,而且可以使用多个视图前缀 :

 

#from mybook.views import method1, method2, method3

urlpatterns = patterns('mybook.views',
    (r'^m1/$', ‘method1’),
    (r'^m2/$', ‘method2‘),
    (r'^m3/$', ’method3’),
)

urlpatterns += patterns('youbook.views',
    (r'^m1/$', ‘method1’),
    (r'^m2/$', ‘method2‘),
    (r'^m3/$', ’method3’),
)
django 框架寻找模块级别变量:urlpatterns,改变可以动态构建此处使用 “ += ”进行合并

利用动态构建urlpatterns技术,可以制作调试模式特例,如:

在urls中添加:

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^debuginfo$', 'mysite.views.debug'),
    )
只有在settings中设置DEBUG=True的时候,访问地址“debuginfo”才有效

##########################

URL 命名组方式

views.py 中:

def method1(year, month):

    pass

urls.py 中:

urlpatterns = patterns('mybook.views',

    (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', views.month_archive),

    )

在 Python 正则表达式中,命名的正则表达式组的语法是 (?P<name>pattern) ,这里 name 是组的名字(参数名),而 pattern 是匹配的某个模式。 使用命名组可以让你的URLconfs 更加清晰,减少参数次序可能搞混的潜在 BUG。

如果我们想修改 URL 把月份放到 年份的 前面 ,而不使用命名组的话,我们就不得不去修改视图 month_archive 的参数次序。如果我们使用命名组的话,修改 URL 里提取参数的次序对视图没有影响

传递额外的参数到视图函数中

urlpatterns = patterns('',
    (r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),
    (r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),

分享到:
评论

相关推荐

    程序员需要经常刷题吗-django-cheatsheets:我创建的django备忘单集合

    需要程序员经常刷题吗Django 备忘单 作为 Django 的初学者,我在学习一个新框架时会做程序员通常做的事情:大量 google,阅读邮件列表条目,并尝试自己编写应用程序。 事实证明,这有点令人失望,因为在 google 上...

    django备忘单

    django-admin startproject myproject django-admin startapp myapp python3 manage.py makemigrations python3 manage.py migrate python3 manage.py runserver Django是MVT框架 它负责控制器部分(控制模型与视图...

    django-cheat-sheet:我正在探索django

    【描述】:“Django备忘单”是一份关于Python的Web框架Django的重要参考资料,旨在帮助开发者快速查阅和回顾Django的关键概念、功能以及最佳实践。这份备忘单可能涵盖了从项目设置到数据库模型,再到视图、模板和URL...

    django-cheatsheet:我一直在寻找Django的东西

    【Django备忘单——Python Web开发神器】 Django,作为一个用Python编写的高级Web框架,因其高效、安全和易用性而广受开发者喜爱。它遵循“干”(Don't Repeat Yourself)原则,旨在简化复杂的Web应用开发过程。这...

    基于 Django + Mysql 实现的简单备忘录.zip

    【标题】基于 Django + MySQL 实现的简单备忘录 这个项目是一个使用Python的Django框架和MySQL数据库构建的简单备忘录应用。Django是一个高级的Web开发框架,它提供了一整套工具来帮助开发者快速地构建高质量的Web...

    aws_s3_django_guide:这是我整理的分步指南,用于设置 AWS 的 S3 以托管 PythonDjango 应用程序的用户生成的静态文件媒体

    John 的 AWS S3 / Django 备忘单 AWS.AMAZON.COM/控制台 在 chrome 中,转到 并导航到仪表板的S3部分 在存储和内容交付下单击创建存储桶 为存储桶命名并选择俄勒冈地区 打开您创建的存储桶 为"admin" 、 "media"和...

    Django+vue+前后端分离备忘录小项目.zip

    在这个"Django+vue+前后端分离备忘录小项目"中,我们主要涉及了三个关键技术:Django(一个Python开发的Web框架)、Vue.js(一个轻量级的前端JavaScript框架)以及前后端分离的设计模式。这个小项目可以作为学习这三...

    Python-基于django制作的简单财务系统

    【Python-基于django制作的简单财务系统】 在Python Web开发领域,Django是一个非常流行的开源框架,它提供了高效、安全且可扩展的解决方案。本项目是利用Django框架构建的一个简单财务系统,旨在帮助用户进行基本...

    python毕业设计-基于Django+Mysql 实现的简单备忘录系统设计与实现+使用说明.zip

    python毕业设计-基于Django+Mysql 实现的简单备忘录系统设计与实现+使用说明.zippython毕业设计-基于Django+Mysql 实现的简单备忘录系统设计与实现+使用说明.zip 【备注】 1、该资源内项目代码都经过测试运行成功,...

    Django,Scrapy,_Twisted等一些项目的源代码阅读备忘_scode.zip

    Django,Scrapy,_Twisted等一些项目的源代码阅读备忘_scode

    Python毕业课程设计基于Django的云办公系统项目源码+数据库.zip

    Python+MySQL毕业设计基于Django的办公系统源码+数据库 包含以下功能: 办公信息处理:包括日常办公信息处理,业务统计数据处理和数据的定量化处理等。 文档管理:公文的准备、起草、审批、发布、下达、批转、汇报,各种...

    django-cheat-sheet:使用Django框架创建Web应用程序的备忘单

    **Django 框架简介** Django 是一个高级的 Python Web 开发框架,它遵循“DRY(Don't Repeat Yourself)”...这个备忘单可能是开发者快速查找和学习 Django 功能的宝贵资源,尤其适合初学者和有经验的开发者作为参考。

    DJANGO-ALLAUTH社交用户系统的安装配置

    但是它的文档写得更乱…很多关键信息居然是在常见问题里面找到…记录下来备忘. 1.安装: 复制代码 代码如下: pip install django-allauth 2.配置 settings.py 复制代码 代码如下: TEMPLATE_CONTEXT_PROCESSORS = ( ...

    beiwanglu.rar_备忘录代码

    10. 整合部署:如果是Web应用,可能会涉及前端技术(HTML、CSS、JavaScript)、后端框架(如Django、Flask、Spring Boot)以及服务器配置。 以上是对"beiwanglu.rar_备忘录代码"可能涉及的IT知识点的详细说明。具体...

    django项目实战之个人密码本管理系统(django)(源码+说明+演示视频).zip

    python+Django+mysql+b/s 【实现功能】 (1)新建密码本:用户可以创建新的密码本来记录自己的账户与密码; (2)平台名称备忘:用户通过记录账号密码的使用平台,避免用户忘记自己账户密码在哪个平台; (3)密码...

    drf-cheat-sheet:Django REST Framework的备忘单快速参考指南

    Django REST Framework(DRF)是构建Web API的强大工具,尤其在使用Python和Django时。这个"drf-cheat-sheet"是一个实用的快速参考指南,帮助开发者快速掌握DRF的关键概念和用法。让我们深入探讨一下这个备忘单可能...

    python&个人密码本管理系统(django)

    python django mysql 需求 用户:用户在软件中可管理个人账户信息、保存,修改密码 检测密码强度和生成强密码; 个人密码本功能概述 1) 新建:用户可以创建新的密码本来记录自己的账户与密码; 2) 平台名称备忘:...

    基于python的个人密码本管理系统(django).zip

    django;mysql; 本次则是通过利用Python技术,搭建一款个人密码本系统,通过该系统的搭建来实现密码备忘录的功能,通过该平台能够实现对多个不同的网站的密码信息进行有效的存储,并且可以通过该系统来检测密码的...

    基于python个人密码本管理系统(django)源码.zip

    基于python个人密码本管理系统(django) 利用Python技术,搭建一款个人密码本系统,通过该系统的搭建来实现密码备忘录的功能,通过该平台能够实现对多个不同的网站的密码信息进行有效的存储,并且可以通过该系统来...

Global site tag (gtag.js) - Google Analytics