python-django基礎教程

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('<h1>welcome to django </h1>')


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;

<li>name:`user`.`name`</li>

 

 {% else %}

用戶不存在

          {% endif %}


2,{% for  book in book_list %}

........

  {% empty %}

........

  {% endfor %}

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

<li>`k`:`v`</li>


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<id>\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('<h1>`uname`</h1>')

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

<div>`forloop`.`counter``emp`</div>

{% endfor %}

<div>共有{{emps.length}}記錄</div>



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

<div>

<h3>`author`.`name`</h3>

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

<li>` book `</li>

{% endfor %}

</div>



模板文件show_book.html


{% for book in books %}

<div>

<h1>`book`.`name`</h1>

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

<li>`author`</li>

{% endfor %}

</div>


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

<body>

<form method="post">

`form`

<input type="submit" value="ok">

</form>

</body>

5,啓動服務python manage.py runserver


6,配置settings文件,把MIDDLEWARE_CLASSES中的csrf那行註釋掉














發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章