视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Django学习笔记
2025-09-29 08:46:50 责编:小OO
文档
一、安装

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.

" % strTime

    return 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 %}

{{u.id}}

{{u.mail}}

{{u.first_name }} {{u.last_name}}

{{u.login_time}}

    {%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.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),

访问http://127.0.0.1:8000/media测试一下,能正常访问,说明设置成功了。下载本文

显示全文
专题