1.下载Python 2.7.2(不要用3.2.2),Django 1.3.1
设置Path环境变量C:\ Python27。
执行python c:\ Django\\setup.py install,安装完成。
把Django的安装路径也写到Path中。
2.创建Project
Django-admin.py startproject task
Cd task
Manage.py runserver
默认端口8000 可以指定端口(manage.py runserver 8080)
二、数据库设置,模型
1.数据库设置
engine=三种数据库或者其他
'django.db.backends.postgresql_psycopg2',
'django.db.backends.mysql'
'django.db.backends.sqlite3'
指定一下数据库名称。
Name=”db”
2.建立app,建立模型
Manage.py startapp users
建立模型,编写model.py
from django.db import models
# Create your models here.
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
mail =models.CharField(max_length=100)
password =models.CharField(max_length=30)
registered=models.DateTimeField(auto_now_add=True)
打开settings.py
INSTALLED_APPS = ();中增加APP ’task.users’,
运行manage.py validate校验是否有错误。
manage.py syncdb 自动建立数据库模型
3.测试API
manage.py shell进入命令行
>>>from users.models import Person
Person.objects.all()
import datetime
p=Person(mail=””, registered= datetime.datetime.now())
p.save()
p.id
p.mail
p2=Person.objects.filter(id=1)
p2[0].mail
Person.objects.get(id=2)
Person.objects.get(mail=”tongiii@163.com" )
#子表Choice
p.choice_set.all()
p.choice_set.create(choice='Not much', votes=0)
Choice.objects.filter(poll__pub_date__year=2007)
# Let's delete one of the choices. Use delete() for that.
c = p.choice_set.filter(choice__startswith='Just hacking')
c.delete()
三、创建页面view.py,urls.py
1.定义view
在view.py页面
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world")
def current_datetime(request):
now = datetime.datetime.now()
#转换日期格式
strTime= repr(now.year) + "-" + repr(now.month) + "-" + repr(now.day)
html = "
It is now %s." % strTimereturn HttpResponse(html)
2.定义urls
urlpatterns = patterns((''),
# Examples:
(r'^users$', 'view.listUsers' ),
(r'^$', 'view.current_datetime' ),
url(r'^admin/', include(admin.site.urls)),
('^hello/$', hello),
)
2.定义模版
(1)创建模版
在APP目录下创建templates目录下,建立一个users.html文件,文件中设置如{{u.mail}}的大括号形式的变量。
{% for u in users %}
{%endfor%}
(2)定义view
#-*- encoding:utf-8 -*-
from django.http import HttpResponse
from django import template
from django.template import loader,Context
from tm.models import User
def listUsers(request):
#模板的例子代码
# t = template.Template('My name is {{ name }}.')
# c = template.Context({'name': 'Adrian'})
# print t.render(c)
page=""
t = loader.get_template("users.html")
users=User.objects.all()
users.count()
c=Context({"users":users,"count":users.count()});
page=t.render(c)
return HttpResponse(page)
四、Google AppEngine安装,设置
1.下载appengine_helper_for_django,复制到本地,冲命名project
运行manage.py runserver,始终运行不通过,报告ValueError too many values to unpack ,把appengine_django 中第215行有问题的代码,直接注释,把appid='a'写死为固定值。则可以继续运行了。
参照http://code.google.com/intl/zh-CN/appengine/articles/appengine_helper_for_django.html继续试验。
2.创建APP,Model
manage.py startapp task
编写task/models.py
from appengine_django.models import BaseModel
from google.appengine.ext import db
# Create your models here.
class User(db.Model):
email=db.StringProperty()
first_name=db.StringProperty()
last_name=db.StringProperty()
registered=db.DateTimeProperty()
login_time=db.DateTimeProperty()
def __unicode__(self):
return self.email+"("+ self.first_name+" "+ self.last_name +")"
settings.py,并确保“task”在 INSTALLED_APPS
进入http://localhost:8000/_ah/admin/,进行后台管理。
五、Ajax报错CSRF token missing or incorrect
参考:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/
django 1.3 报错 CSRF token missing or incorrect 解决方法
原因解释:
CSRF(跨站请求伪造),django 1.2以后的版本(django 1.3)中在projects的setting中默认配置了处理CSRF的中间件
'django.middleware.csrf.CsrfViewMiddleware',
因此,如果post提交表单的html代码如下,django会抛出一个异常.
CSRF token missing or incorrect.
同样在异常信息中,django给出了解决方案.
引用
In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.
所以html如下,在form区域内加上了{% csrf_token %}
A hidden form field with the name 'csrfmiddlewaretoken' present in all outgoing POST forms. The value of this field is the value of the CSRF cookie.
This part is done by the template tag (and with the legacy method, it is done by CsrfResponseMiddleware).
这个标签会自动被django模板处理成一段html
这应该是用来让CsrfViewMiddleware 中间件进行处理时一个标识吧,这个隐藏域的value看起来是一个32位加密的MD5值。
暂时的解决方法:
Setting.py中MIDDLEWARE_CLASSES,去掉'django.middleware.csrf.CsrfViewMiddleware'一行。
六、修改数据库表结构。增加外键字段
1.Models.py中定义
class Organization(models.Model):
ID =models.IntegerField(primary_key=True) OrganizationName=models.CharField(max_length=200,null=False,blank=False)
class Person(models.Model):
增加外键字段
Organization = models.ForeignKey(Organization,null=True)
2.运行manage.py syncdb,同步数据库。
运行 manage.py sql APP 列出APP的相关建表sql文
运行Manage.py dbshell,调出sqlite3的控制台界面。
如果提示”sqlite3不是内部或外部命令..”,从sqllite官网上下载一下windows的发布程序。复制到工程目录下。再运行。
执行 alter table tm_person add column "Organization_id" integer REFERENCES "tm_organization" ("ID")。成功创建外键字段。
七、设置静态文件
1.设定settings.py文件
ROOT_PATH = os.path.dirname(os.path.realpath(__file__))
MEDIA_ROOT ="%s/%s/" % (ROOT_PATH, 'media')
MEDIA_URL = 'media'
在项目目录下建立media目录,把静态文件.js,.html,.css文件都复制到这个目录。
2.设置urls.py文件
from django.conf.urls.static import static
增加url定义如下:
(r'^media/(?P 访问http://127.0.0.1:8000/media测试一下,能正常访问,说明设置成功了。下载本文