Django学习笔记

来源:互联网 发布:vpn如何设置外域网域名 编辑:程序博客网 时间:2024/05/05 23:07

【工作流程】

转入请求——根据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.counterforloop.counter0forloop.revcounterforloop.firstforloop.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_NAMEDATABASE_USERDATABASE_PASSWORD

DATABASE_HOSTDATABASE_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/ 

RequestContextContext处理器】

指定相同的变量值

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)

原创粉丝点击