【工作流程】
转入请求——根据ROOT_URLCONF配置装载urlConf——根据配置查找匹配项目——执行相关视图方法,返回HttpResponse对象——转换成HTTP response,以WebPage方式显示
框架安装:python setup.py install
(setup.py在下载包中)
快速生成项目:django_admin.py startproject proname
运行服务器 python manage.py runserver
Settings.py项目配置文件
Urls.py项目路由配置
【视图】
导入相关类
from django.http import HttpResponse
视图方法第一个参数为request包含请求信息,返回一个HttpResponse对象,参数为要显示的内容
Def ViewName(request,param1,param2…):
…
html = “hello world”
return HttpResponse(html)
URLConf(在urls.py文件中)
urlpatterns = (‘prex’,(‘^hello$’,hello)),hello为视图方法名(函数对象方法)
或者urlpatterns = (‘’,(‘^ss$’,’mysite.views.hello’)) (字符串方法)
【模板】
导入模板类
from django import template
实例化
t = template.Template(‘name{{name}}’)
变量赋值
c = template.Context({‘name’:’yzw’})
输出t.render(c)
变量标签{{name}}逻辑标签{%if%}{%endif%}
【相关标签】
{%if name is None%} … {%else%} … {%endif%}
{%for vx in arr reversed%} {%vx%} {%empty%} {%endfor%}
循环变量forloop.counter、forloop.counter0、forloop.revcounter、forloop.first、forloop.last
{%ifequal param1 param2%} … {%else%} … {%endifequal%}
【模板文件设置】
(以settings.py所在目录mysite为基准,所有模板文件放在mysite/templates)
import os.path
TEMPLATE_DIRD = (
os.path.join(os.path.dirname(__file__),’templates’).replace(‘\\’,’/’), )
【渲染】
mysite/templates/test.html页面
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
t = get_template(‘test.html’)
varArr = {‘name’:’yzw’,’id’:265}
html = t.render(Copntext(varArr))
return HttpResponse(html)
render_to_pesponse实现模板加载、上下文创建、模板解析和HttpResponse对象创建等工作
from django.shortcuts.render_to_response
return render_to_response(‘test.html’,varArr)
【模板继承】
{%block%}{%endblock%}所有子模板可以重载的区域
基础模板base.html
子模板{%expand = ‘base.html’%}
{%block title%}XXX{%endblock%}
访问父模板的内容{{}block.super}
【数据库】
配置项(在settings.py文件中)
DATABASE_ENGING:’mysql’,’sqlite3’,’oracle’
DATABASE_NAME、DATABASE_USER、DATABASE_PASSWORD、
DATABASE_HOST、DATABASE_PORT
App结构:__init__py models.py tests.py views.py
【模型类】
from django.db import models
class PersonModel(models.Model):继承自models.Model
字段创建name = models.CharField(max_length = 10)
EmailField()、UrlField()、DateField()字段创建
模型导入
INSTALL_APPS = (‘mysite.books’)
【基本数据访问】
增加:p = PersonModel(name = ‘yzw’,age = 22,message =’FZU’) p.save()
或者p = PersonModel.objects.create(name=’yzw’,age=22,message=’fzu’)
更新记录p.age = 21 p.save()
魔法方法__unicode__()返回一个unicode对象
选择所有记录,返回一个记录集
PersonModel.objects.all() ## objects成为模型管理器
PersonModel.objects.filter(name =’t’,age=’2’) ##and联合查询
字段条件表示
name__contains = ‘t’ ## like ‘%t%’。name__icontains
name__startswith name__endswith name__range相当于between
PersonModel.objects.get(name=’yzw’)返回单个对象
排序PersonModel.objects.order_by(‘name’,’-age’) ##按姓名升序、年龄降序排列
默认排序:使用内建类表示class Meta: ordering = [‘name’]
连锁查询PersonModel.objects.filter(name__contains=’a’).order_by(‘-age’)
固定数目:PersonModel.objects.order_by(‘name’)[0:5]
更新多条记录,返回影响的记录数PersonModel.objects.filter(id=52).update(name=’ccc’)
p = PersonModel.objects.get(id=52) p.delete()
PersonModel.objects.all().delete()
路由规则合并
urlpatterns = (‘user’,(‘^user/add$’,’add’))
urlpatterns += (‘commission’,(‘^commission/add$’,’add’))
url命名组(?P<name>) url匹配
http://myexample.com/app/?page=3匹配app/
【RequestContext和Context处理器】
指定相同的变量值
def defaultVar(request):
return {‘version’:’V1.0Beta01’,’date’:’2013-03-01’}
def view_one(request):
t = loader.get_template(‘show_one.html’)
c = RequestContext(request,{‘cur_ver’:cc},processors=[deaultVar])
return t.render(c)
使用render_to_response方法,
return render_to_response(‘show_one.html’,{‘cur’:’cc’},
context_instance = ResquestContext(request,processors=[defaultVar]))
【同一模型的多个管理器】
class OneManager(models.Manager):
def get_query_set(self):
return super(OneManager,self).get_query_set().filter(sex=’f’)
class Person(models.Model):
objects = models.Manager() ##默认管理器
woman = OneManger()
使用Person.woman.all()
原始SQL
from django.db import connection
cu = connection.cursor()
cu.execute(sql)