django语法点滴

以下是在练习和项目过程中总结列出来的django的易出错和该注意的地方,因为比较比较杂,单独不能成一篇文章,因此都列在这里。

1. django的template中

{%         %}

注意%和}必须紧挨着,不能有空格,否则django不认。

2. 创建django的form可以直接定义default值

form = CustomForm( initial={ ‘title’:’default’ })

3.  隐藏django的form field

widget=forms.HiddenInput

例如:

content=forms.CharField( widget=forms.HiddenInput)

4. django的shell可以协助调试web项目

如果要调试web,可以print出对应变量的值,或者直接使用python manage.py runserver –pdb方式,而这两种方法都需要客户端的http的request请求,这里的客户端通常是浏览器如firefox,如果我们只是想测试我们一段访问数据的代码是否工作,就没有必要firefox参与进来。

我们可以使用

python manage.py shell

例如:

>>> from blog.models import *
>>> blog.objects.all()
Traceback (most recent call last):
  File “<console>”, line 1, in <module>
NameError: name ‘blog’ is not defined
>>> Blog.objects.all()
[<Blog: Blog object>, <Blog: Blog object>, <Blog: Blog object>, <Blog: Blog object>, <Blog: Blog object>, <Blog: Blog object>, <Blog: Blog object>, <Blog: Blog object>, <Blog: Blog object>]
>>> blog = Blog.objects.all()
>>> blog.count()
9
>>> blog[0].title
u’my first blog’

5. django默认操作数据都是以unicode编码方式

6. django直接使用sql语句访问数据库

django提供了很方便的数据库操作层,但是有时候你发现它还是不够用。这时候你想直接使用sql操作数据库,django让你很方便使用它,并且提供了2中方式:

a. 基于已创建的model

https://docs.djangoproject.com/en/dev/topics/db/sql/#performing-raw-queries

下面是示例代码:

>>> Blog.objects.raw(“select * from blog_blog”)
<RawQuerySet: ‘select * from blog_blog’>
>>> blog = Blog.objects.raw(“select * from blog_blog”)
>>> bg = Blog.objects.raw(“select * from blog_blog”)
>>> bg.count()
Traceback (most recent call last):
  File “<console>”, line 1, in <module>
AttributeError: ‘RawQuerySet’ object has no attribute ‘count’
>>> len(bg)
Traceback (most recent call last):
  File “<console>”, line 1, in <module>
TypeError: object of type ‘RawQuerySet’ has no len()
>>> len(list(bg))
9

b. 基于数据库的连接 – 这种方式已经完全脱离了django的model

https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly

下面是示例代码:
>>> from django.db import connection, transaction
>>> cs = connection.cursor()
>>> bg1 = cs.execute(“select * from blog_blog”)
>>> type(bg1)
<type ‘long’>
>>> print bg1
9
>>> row = cs.fetchone()
>>> print row
(1L, u’common’, u’my first blog’, u’Jhon’, u’yeah, as you can see from title, this is my first blog. Just for practic’, datetime.date(2012, 4, 20), datetime.date(2012, 4, 20))
>>>

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

留言

你的邮箱是保密的 必填的信息用*表示