1,安装django : python setup.py install

2,django-admin.py startproject csvt01---》表示新建一个项目csvt01

3,有以下目录:

1,__init__.py    初始化

2,settings.py    django的设置

DEBUG=TRUE   表示开启debug功能

LANGUAGE_CODE='zh-cn'    语言为中文

TIME_ZONE=‘Asia/Shanghai’地区为中国上海

INSTALLED_APPS      把用户的应用添加到此中,本例为blog

‘blog’,


3,urls.py        url配置文件

url(r'^blog/index/$','blog.views.index'),   -->此为映射测试。意为访问csvt01的blog的index则转移到blog(app)的views.index

4,manage.py      管理配置

4,django-admin.py startapp blog   -->新建app,名为blog。同上一样.进入工程目录下创建

1,编辑blog目录下的views.py文件

定义一个方法

from django.http import HttpResponse

def index(req):

        return HttpResponse('

welcome to django

')


2,使用命令 python manage.py runserver启动服务

5,建立模板集合  blog/templates。并把需要发布的文件移动到此,本例为hello.html

6,静态加载模板文件   vim blog/views.py

方法一:

from django.template import loader,Context   --》导入模板模块

def index(req):

t=loader.get_tempplate('hello.html') --》加载模版文件

c=Context({})   --

return HttpResponse(t.render(c))  -->渲染context数据,然后通过response返回

方法二:from django.shortcuts import render_to_response

def index(req):

        return render_to_response('index.html',{})


7,动态加载文件(配合字典使用)

在源文件中使用变量,在映射的文件中views.py定义变量

还可以使用字典,key作为变量


动态变量为用大括号包住: 例: {{title}},`user`

方法三:from django.shortcuts import render_to_response

def index(req):

        return render_to_response('index.html',{'title':'my page','user':'tom'})

方法四:from django.shortcuts import render_to_response

def index(req):

user={'age':23,'name':'tom','sex':'male'}

        return render_to_response('index.html',{'title':'my page','user':user})

可以在原动态变量文件中直接引用:例: user.name 等等

方法五:

class Person(object):

        def __init__(self,name,age,sex):

                self.name=name

                self.age=age

                self.sex=sex


def say(self):

return “i'm”+self.name 

def index(req):

        user=Person('tom',24,'male')

return render_to_response('index.html',{'title':'my page','user':user})

                 


8,模板标签的使用。在模板文件中配置。index.html

1,{% if user %}    if中的and和or不能直接连用;bool;==,!=;in,not in;

  • name:`user`.`name`
  •  

     {% else %}

    用户不存在

              {% endif %}


    2,{% for  book in book_list %}

    ........

      {% empty %}

    ........

      {% endfor %}

    例:{% for k,v in user.items %}

  • `k`:`v`

  • 9,URLconfig   urls.py文件

    使用方式;

    1,url(r'^blog/index/$','blog.views.index'),正则表达式

    2,from blog.views import index   直接导入的方式

    url(r'^blog/index/$',index),

    3,urlpatterns=patterns('blog.views',

    url(r'^blog/index/$','index'),

    )

    4,urlpatterns=patterns('blog.views',

    url(r'^blog/index/\d{2}/$','index'),

    )

    5,urlpatterns=patterns('blog.views',

    url(r'^blog/index/?P\d{2}/$','index'),  -->参数分组id


    10,模板的使用

    1,新建项目

    2,进入项目,创建应用blog

    3,配置settings.py文件。添加应用

    4,进入到应用目录中,创建一个默认的文本目录templates

    5,编辑urls.py。建立一个测试的url. url(r'^index/$','blog.views.index')

    6,编辑应用下面的views.py文件,创建index方法

    模板的使用步骤:

    1,模板文件的加载   

    from django.template import loader,Context

    from django.http import HttpResponse

    def index(req):

    t=loader.get_template('index.html')  ->载入模板文件。需要建立文件

    c=Context({'uname':'alen'}) ->创建context对象,变量(字典)渲染。此处uname为key.

    html=t.render(c)  ->渲染数据

    return HttpResponse(html)  ->输出

    也可以使用shell测试。

    ipython manage.py shell

    2,直接使用template类

    from django.template import Template,Context

    def index(req):

    t=Template('

    `uname`

    ')

    c=Context({'uname':'csvt'})

    return HttpResponse(t.render(c))

    3,使用render_to_response方法

    from django.shortcuts import render_to_response

    def index(req):

    return render_to_response('index.html',{'uname':'csvt02'})   --->参数一为模板文件,参数二为渲染的变量





    11,数据库的基本使用

    安装数据库:yum -y install mysql*

    启动数据库:service mysqld start。

    使用root用户登录数据库:mysql -uroot -p。

    创建数据库

    create database csvt default charset=utf8

    安装MySQL-python.在python下,import MySQLdb.连接数据库

    1,创建新工程,进入工程并创建应用

    2,配置settings。添加应用,添加数据库

    在默认的引擎下把mysql添加上

    name项添加database名csvt

    用户名root

    password,host,port可以使用默认。mysql端口默认为3306

    3,编辑应用目录下的models.py文件

    class Employee(models.Model):    -->当数据库同步后,此为一张表,表名为应用名+类名

    name=models.CharField(max_length=20)

    4,数据库同步.会创建多个表(重要为blog_employe)

    python manage.py syncdb   -->自动检测应用,检查应用下是否有models,如果有则自动创建表

    5,使用数据库use csvt

       show tables;desc blog_employee


    12,数据库的基本使用2:

    python manage.py shell -->进入python的交互界面

    配置数据库记录方式一:

    1,导入类对象: from app1.models import Employee

    2,创建实例对象:emp=Employee()

    3,创建属性: emp.name='alen'

    4,保存: emp.save()

    配置数据库记录方式二;

    1,实例化对象:emp=Employee(name='tom')

    2,保存:emp.save()

    配置数据库记录方式三:

    1,直接通过类方法:Employee.objects.create(name='max')

    查看:

    emps=Employee.objects.all()

    emps

    emps[0].id[name]

    在类文件app1.models.py中增加方法:

    def __unicode__(self):

    return self.name

    然后再次查看

       使得在浏览器上可以查看:


    在url文件中新增记录:

    url(r'^index/$','app1.views.index')

    然后在app1的views文件下,定义index方法:

    from app1.models import Employee

    from django.shortcuts import render_to_response

    def index(req):

    emps=Employee.objects.all() -->获取记录

    return render_to_response('index.html',{'emps':emps})  -->渲染数据

    接着创建模版集template/index.html

    编辑配置模板文件index.html

    可以配合模板标签,规范显示

    {% for emp in emps %}

    `forloop`.`counter``emp`

    {% endfor %}

    共有{{emps.length}}记录



    13,model之间的关系

    1,manytoone:多对一

    1,创建项目,进入项目内创建app,修改settings文件,配置db数据库,apps添加

    2,配置model对象:

    class Entry(models.Model):

    name=models.CharField(max_length=30)

    def __unicode__(self):

    return self.name

    class Blog(models.Model):

    name=models.CharField(max_length=30)

    entry=models.ForeignKey(Entry)  -->此处Entry为one

    def __unicode__(self):

    return self.name

    3,进入数据库,创建数据库

    4,数据库同步 python manage.py syncdb

    5,进入交互界面 python manage.py shell

    from blog.models import Entry,Blog

    entry1=Entry.objects.create(name='alen') -->首先创建one对象

    entry2=Entry.objects.create(name='max')

    entry3=Entry.objects.create(name='max1')

    blog1=Blog.objects.create(name='alen-blog',entry=entry1)

    blog1查找;

    blog1.entry   ;   blog_entry_id  -->many端进行的查询

    entry1.blog_set.all()  -->one端进行的查询





    14,后台管理数据库

    1,创建工程csvt05,进入工程目录;创建应用blog,配置settings文件,数据库为sqlite3;添加应用

    然后把django.contrib.admin应用启用

    2,修改url.py文件.加入一下内容

    from django.contrib import admin

    admin.autodiscover()

    url(r'^admin/',include(admin.site.urls))

    3,修改models文件:

    from django.db import models

    sex_choices=(

    ('f','female'),

    ('m','male'),

    )

    class User(models.Model):

    name=models.CharField(max_length=20)

    sex=models.CharField(max_length=1,choices=sex_choices)

    def __unicode__(self):

    return self.name

    4,数据库的同步 python manage.py syncdb

    5,运行开发服务器 python manage.py runserver

    6,创建文件 blog/admin.py

    from django.contrib import admin

    from blog.models import User

    admin.site.register(User)

    7,测试

    sqlite3 csvt04.db

    .help查看帮助

    .tables显示所有表



    15,model中多对多的关系

    1,创建工程,进入工程目录,创建应用;修改settings,设置数据库sqlite3,加入应用admin及需要的应用

    2,编辑models,

    from django.db import models

    class Author(models.Model):

    name=models.CharField(max_length=20)

    def __unicode__(self):

    return self.name

    class Book(models.Model):

    name=models.CharField(max_length=30)

    authors=models.ManyToManyField(Author)

    def __unicode__(self):

    3,数据库同步 python manage.py syncdb

    4,进入数据库 sqlite3 db

    5,管理数据.

    进入解释器 python manage.py shell

    from blog.models import Author,Book

    Author.objects.create(name='alen')

    Author.objects.create(name='ben')

    Author.objects.create(name='carl')

    authors=Author.objects.all()


    b1=Book()

    b1.name='python book1'

    b1.save()


    alen=Author.objects.get(name__exact='alen')  =====alen=authors[0]-->获取作者

    b1.authors.add(alen) -->添加书的作者为alen

    b1.authors.add(authors[1]) -->添加书的作者

    b1.authors.all() -->查看b1的所有作者

    b1.authors.remove(alen) -->删除作者

    b1.authors.filter(name__exact='carl')


    alen.book_set.all()   -->查看alen的所有书

    alen.book_set.add(b1) -->alen添加一本书b1

    alen.book_set.create(name='python book2')  ->添加书


    books=Book.objects.all()   -->查看所有书

    alen.book_set.remove(books[0])  -->删除书



    16,数据呈现在页面

    承接上文内容

    for author in Author.objects.all():

    for book in author.book_set.all():

    print book


    1,创建模板目录,并创建模板文件show_author.html

    {% for author in authors %}

    `author`.`name`

    {% for book in author.book_set.all() %}

  • ` book `
  • {% endfor %}



    模板文件show_book.html


    {% for book in books %}

    `book`.`name`

    {% for author in book.authors.all %}

  • `author`
  • {% endfor %}


    2,编辑views.py

    from blog.models import Author,Book

    from django.shortcuts import render_to_response

    def show_author(req):

    authors =Author.objects.all()

    return render_to_response('show_author.html',{'authors':authors})

    def show_book(req):

    books =Book.objects.all()

    return render_to_response('show_book.html',{'books':books})


    3,配置url.py文件

    url(r'^blog/show_author/$','blog.views.show_author')

    url(r'^blog/show_book/$','blog.views.show_book')

    4,开启开发服务器 python manage.py runserver




    17,表单form

    1,创建项目,进入该目录,创建应用;修改settings文件sqlite3,name,app添加

    2,编辑url文件

    url(r'^blog/register/$','blog.views.register')

    3,编写views文件

    from django import forms

    from django.http import HttpResponse

    from django.shortcuts import render_to_response

    class UserForm(forms.Form)

    name=forms.CharField()


    def register(req):

    if req.method=='POST'  -->数据提交动作

    form = UserForm(req.POST)  -->绑定数据

    if form.is_valid():

    print form.cleaned_data ->数据获取

    return HttpResponse('ok')

    else:     -->数据获取动作(get)

    form =UseForm()

    return render_to_response('register.html',{'form':form})


    4,创建模板文件register.html

    `form`

    5,启动服务python manage.py runserver


    6,配置settings文件,把MIDDLEWARE_CLASSES中的csrf那行注释掉