经常使用到django的东西,或者相关的笔记,版本为v1.5
1 查看版本号
import django
print django.VERSION
2 查看manage.py的功能
python manage.py help
3 关于view.py
对于view.py的命名是没有要求的,这个其实之前就应该猜到了,只是一直没有去尝试这个东西
4 返回http响应
(1) HttpResponse("Hello world")
引入的包: from django.http import HttpResponse
5 url的配置使用
urls.py在会在不同应用中出现,同时,原始里面也有urls.py,所以,需要进行对之配置。
假设工程名为ProDj,应用名为AppDj,那么,ProDj的urls.py的使用情况是
from django.conf.urls import patterns,include,url
urlpatterns=patterns('',
url(r'^AppDj/',include('AppDj.urls')),
#往下继续添加,类似
)
注意的是,内容中的第一个AppDj是网络前缀,是用来表示网页请求的,例如http://127.0.0.1:8000/AppDj。而第二个则是转向应用目录AppDj下的urls.py
AppDj下的目录是应该的
from django.conf.urls import patterns,url
from AppDj import views
urlpatterns=patterns('',
url(r'^$',views.func1,name"f1"),
#以下继续添加,注意使用的方法是正则表达式
),
在settings.py 找到TIME_ZONE,设置为亚洲上海
TIME_ZONE='Asia/Shanghai'
7 模板的使用
表示变量: {{ aVar }}
表示语句:
for语句
<ul>
{% for item in item_list %}
<li> {{ item}} </li>
{% endfor %}
</ul>
if语句:
{% if aVar %}
<p> print some thing</p>
{% else %}
<p> print others </p>
{% endif %}
filter语句(这个还不知道怎么用):
{{ ship_date|date:"F j,Y"}}
访问模板变量的对象成员:
from django.template import Template,Context
person={'name':'Sally','age':'43'}
t=Template('{{ person.name}} is {{ person.age }} years old')
c=Context({'person':person})
t.render(c)
模板变量的方法调用:
注意1 :不要传递任何参数,除了self
注意2:如果异常里面没有属性silent_variable_failure,那么异常引发时会被传播
注意3:如果不希望模板调用这个方法,需要在原来类的这个方法中调用设置alters_data=True
def delete(self):
delete.alters_data=True
处理无效变量:
如果变量无效,模板会将其表示为空字符串
导入模板,然后渲染
from django import template,Context
t=template.Template('/path/to/file')
c=template.Context({'key1':'str','key2':2})
t.render(c)
注意,render函数返回的是一个unicode对象。在Django框架中,会一直使用Unicode对象而不是普通的字符串。这个非常好。。。。对于同一模板调用Template一次,多次使用render就够了,而不要多次使用Template,那样会造成资源的浪费
8 设置环境变量
DJANGO_SETTINGS_MOUDLE,这个变量可以从manage.py里面看到
9 模板路径设置
在工程ProDj目录下,新建目录Template;
在Settings.py中设置
TEMPLATE_DIRS=(
'/path/to/ProDj/Template',
)
在Template中,新建目录AppDj
在views.py中
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
t=get_template("AppDj/you_html_file")
c=Context({"key":"value"})
t.render(c)
10 一次性加载模板并渲染:
from django.shortcuts import render_to_response
render_to_response('html_file.html',{"key1":"value1","key2":"value2"})
如果不使用第二个参数,将使用一个空字典
11 将所有变量加载到字典:使用locals(),它对所有的局部变量的名称与值进行映射
key="value"
render_to_response('html_file',locals())
12 include模板标签
{ % include 'AppDj/your_html_file' %}
13 模板继承 block
基础模板 base.html
内容:
<html>
<head>
<title>{% block title % }{% endblock % }</title>
</head>
<body>
<h1>example </h1>
{% block content %} {% endblock %}
{% block footer %}
<hr>
<p>something footer</p>
{% endblock %}
</body>
</html>
继承模板 current.html
{% extends "base.html" %}
{% block title %} the current title { %endblock% }
{%block content%}
<p>something {{ somevalue }}</p>
{% endblock %}
模板中没有修改footer的内容,所以使用父模板的内容
14 MVC模式
Model表示数据存取层
View 代表的是系统中选择显示什么和怎么显示
Controller指的是系统根据用户的输入请求决定访问模型和视图
15 使用数据库
--使用非sqlite3数据库
安装好需要的数据库
配置settings.py中的DATABASE_ENGINE的内容,根据提示即可
安装相应的适配器引擎,mysql对应python-MySQLdb,其他的对应去找
16 添加应用
python manage startapp AppDj
在settings.py添加中找到INSTALLED_APP,添加
'AppDj'
之后根据url的配置使用进行使用
17 使用模型
在AppDj目录下的models.py中,
from django.db import models
class A(models.Model):
charf=models.CharFiled(max_length=10)
urlf=models.URLField()
emailf=models.EmailField()
datef=models.DateField()
使用python manage.py syncdb
18 使用管理员账户
在ProDj目录的settings.py中,在INSTALLED_APP中将admin里面相关的注释取消掉
在ProDj目录的settings.py中,在MIDDLEWARE_CLASS中添加 'django.middleware.locale.LocaleMiddleware',
python manage.py syncdb
在ProDj目录的urls.py中,将和admin相关的注释掉
19 将模块添加到管理站点中
在AppDj中新建文件admin.py
from django.contrib import admin
from models import A,B
admin.site.register(A)
admin.site.register(B)
其中A,B为models中定义的类
20 查看http的头部
request.path:除了域名之外的请求路径
request.get_host() 域名
request.get_full_path()全部路径
request.is_secure() 是否使用https
request.META 一个字典 ,包含所有本次http请求的Header信息。键值: HTTP_REFERER进站前的链接,HTTP_USER_AGENT用户的浏览器的user_agent字符串,REMOTE_ADDR客户端IP,如果是经过代理,则以逗号隔开,"123.123.123.123,124.124.124.124"
21 使用cookie
读取cookie
request.COOKIES 是一个COOKIE对象,可以从中读取内容
写cookie
使用HttpResponse的set_cookie方法,
def setcookie(request):
if 'key' in request.GET:
response=HttpResonse(request.GET('key'))
response.set_cookie('key',request.GET('key'))
else:
response=HttpResonse('you dont have a cookie')
return response
22 使用session