=All about Django=
import django print django.VERSION
$ django-admin.py startproejct mysite # 在当前目录创建一个名为 mysite 的 django 项目
$ python manage.py runserver # 运行服务器,默认地址http://127.0.0.1:8000/ $ python manage.py runserver 0.0.0.0:8000 # 这样就能通过8000端口从外部访问了... $ python manage.py startapp myapp # 创建一个名为 myapp 的 app $ python manage.py validate # 检查 models 的语法和逻辑是否正确 $ python manage.py sqlall # 只显示一下会执行哪些 SQL 语句,并不会真正执行 $ python manage.py syncdb # 执行 SQL 到数据库
from django.conf.urls.defaults import patterns, url from views import home_view, time_ahead urlpatterns = patterns('', url(r'^$', home_view), url(r'^time/plus/(\d{1,2})/(\d{1,2})/$', time_ahead), # () 用来从 URL 中取值并传给 views,所以 time_ahead(request, value1, value2) url(r'^time/plus/(?P<value1>\d{1,2})/(?P<value2>\d{1,2})/$', time_ahead), # 跟上面一样,但可以按变量名取值了 )
符号 | 匹配 |
---|---|
. | 任意单个字符 |
^ | 以...开始 |
$ | 以...结束 |
\d | 任意单个数字 |
[A-Z] | 从A到Z的任意大写字母 |
[a-z] | 从a到z的任意小写字母 |
[A-Za-z] | 从A到z的任意字母(大小写不敏感) |
+ | 一个或多个前置表达式,如 \d+ 表示一个或多个数字 |
* | 零个或多个前置表达式 |
? | 零个或一个前置表达式 |
{m, n} | 重复m到n次前置表达式, 如 \d{1, 3} 能够匹配1位,2位或者3位数字 |
{{ forloop.counter }} # 输出当前循环数,从1开始 {{ forloop.counter0 }} # 跟上面一样,只不过从0开始... {{ forloop.revcounter }} # 剩余循环次数(包括当前循环) {{ forloop.revconuter0 }} # 跟上面一样,但每一次都是上面的值减1 {{ forloop.first }} # 判断是否是第一次循环,如果是就返回 True,否则返回 False {{ forloop.last }} # 判断是否是最后一次循环,如果是就返回 True,否则返回 False {{ forloop.parentloop }} # 用于嵌套循环时,相当于母循环的 forloop
{% ifequal user currentuser %} # 判断 user 和 currentuser 是否相等
{# 这是单行注释 #} {% comment %} 这是多行注释 {% endcomment %}
{{ name|lower }} # 将 name 转换成小写 {{ my_list|first|upper }} # 输出 my_list 的第一个元素,并将其转换为大写 {{ bio|truncatewords:"30" }} # 输出bio的前30个单词
{% include 'nav.html %} # 将 nav.html 的内容导入当前模板
#main.html <!DOCTYPE HTML> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}</title> </head> <body> {% block header %}{% endblock %} {% block contant %}{% endblock %} {% block footer %}{% endblock %} </body> </html> #template.html {% extends "main.html" %} {% block title %}我是标题..{% endblock %} {% block content %}我是内容...{% endblock %}
在 models.py 里定义表
from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) # CharField 必须有一个 max_length 参数 def __unicode__(self): # 返回值(Unicode 对象)可以替代一个 Publisher 对象 return self.name class Meta: ordering = ['name'] # 按 name 排序
在 views.py 里执行对数据库的操作
from models import Publisher p1 = Publisher(name='Apress') # p1 为 Publisher对象,其 name 为 Apress p1.save() # 将 p1 保存到数据库中 p2 = Publisher.objects.create(name="O'Reilly") # 创建一个 name 为 O'Reilly 的 Publisher 对象,并保持到数据库中 Publisher.objects.all() # 取出 Publisher 表中的所有对象 Publisher.objects.order_by("name") # 取出 Publisher 表中的所有对象并按照 name 排序,若要倒序,只要在 name 前面加个 - 即可,即 order_by("-name") Publisher.objects.filter(name__contains="press") # 取出 Publisher 表中的 name 中包含 press 的对象 Publisher.objects.filter(id=1).update(name='Apress Publishing') # 更新记录 Publisher.objects.filter(name='Apress').delete() # 删除
request.PATH | 请求的路径,不包含域和参数 |
request.get_host() | 域 |
request.get_full_path() | 请求的路径,包含参数 |
request.is_secure() | 判断是否 https |
request.META | HTTP header 里包含的信息(字典类型),如 request.META['HTTP_USER_AGENT'] 获取用户浏览器的 UA,request.META['REMOTE_ADDR'] 获取请求来源的 IP |
request.GET['name'] | 从 GET 请求中获取 name 的值 |
request.POST['password'] | 从 POST 请求中获取 password 的值 |
# 在 forms.py 里定义一个 ContactForm 表单 from django import forms class ContactForm(forms.Form): subject = forms.CharField() email = forms.EmailField(required=False, label='Your e-mail address') message = forms.CharField(widget=forms.Textarea) # widget 用来重写字段为 <textarea> # 自定义验证规则,django 会自动寻找名为 clean_fieldname 的方法并在验证的时候执行 def clean_message(self): message = self.cleaned_data['message'] num_words = len(message.split()) if num_words < 4: raise forms.ValidationError("Not enough words!") return message # 记得 return !!! # 在 views.py 调用 ContactForm from forms import ContactForm def test(): # 声明一个 ContactForm 对象 f f = ContactForm() # 输出 f 为 table 格式 print f # 输出 f 为 ul 格式 print f.as_ul() # 输出subject 字段(<input type="text" />) print f['subject'] # 验证表单 f = ContactForm({'subject': 'Hello', 'email': 'test@verycb.me', 'message': 'nice site!'}) f.is_valid() # True f.is_bound # True f.errors # 输出错误 f.cleaden_data # 输出字典类型的表单数据 # 表单初始化 f = ContactForm( initial = {'subject': 'I love your site!'} )