Windows python +django学习

1.开始运行一个项目(Starting a project)
django-admin.py startproject mysite(mysite表示项目的名称)
2。manage.py runserver启动服务
python manage.py runserver 0.0.0.0:8080
3.创建一个Wiki
manage.py startapp wiki
4.
与数据库的交互学习例子
在web/apps/models.py

from  django.db  import  models   
  
class  Publisher(models.Model):   
    name 
=  models.CharField(maxlength = 30 )   
    address 
=  models.CharField(maxlength = 50 )   
    city 
=  models.CharField(maxlength = 60 )   
    state_province 
=  models.CharField(maxlength = 30 )   
    country 
=  models.CharField(maxlength = 50 )   
    website 
=  models.URLField() 


 创建了一个模型
其中有六个字段例如Publisher模型对应了下面的表(假设使用PostgreSQL的CREATE TABLE语法):

代码
CREATE TABLE "books_publisher" (  
    "id" serial NOT NULL PRIMARY KEY,  
    "name" varchar(30) NOT NULL,  
    "address" varchar(50) NOT NULL,  
    "city" varchar(60) NOT NULL,  
    "state_province" varchar(30) NOT NULL,  
    "country" varchar(50) NOT NULL,  
    "website" varchar(200) NOT NULL  
);  

#在配置文件中激活模型,添加了 'apps.Publisher',django就会自动生成相应的表

INSTALLED_APPS  =  (
    
' django.contrib.auth ' ,
    
' django.contrib.contenttypes ' ,
    
' django.contrib.sessions ' ,
    
' django.contrib.sites ' ,
    
' django.contrib.admin ' ,
    
' django.contrib.markup ' ,
    
    
' apps.books.Publisher ' ,


    
    
   像下面这样运行syncdb命令:python manage.py syncdb
你会看到如下信息:
Creating table books_publisher
Installing index for books.Book model
syncdb简单的把你的模型同步到数据库

数据访问基础
一旦你创建了一个模型,Django自动提供高级Python API给这些模型工作
运行python manage.py shell然后输入下面的代码试试:


代码

>>>   from  books.models  import  Publisher   
>>>  p  =  Publisher(name = ' Apress ' , address = ' 2560 Ninth St. ' ,   
...     city
= ' Berkeley ' , state_province = ' CA ' , country = ' U.S.A. ' ,   
...     website
= ' http://www.apress.com/ ' )   
>>>  p.save()   
>>>  p  =  Publisher(name = " O'Reilly " , address = ' 10 Fawcett St. ' ,   
...     city
= ' Cambridge ' , state_province = ' MA ' , country = ' U.S.A. ' ,   
...     website
= ' http://www.oreilly.com/ ' )   
>>>  p.save()   
>>>  publisher_list  =  Publisher.objects.all()   
>>>  publisher_list   
[
< Publisher: Publisher object > < Publisher: Publisher object > ]   

 

url和视图
URL配置搜索什么
当一个请求过来,Django试图把URL当作普通的Python字符串而不是Unicode字符串来和URL配置模式匹配
这不包括GET或POST参数,或者域名,它也不包括第一个斜线,因为每个URL都以斜线开头
例如,对http://www.example.com/myapp/的请求,Django将试图匹配myapp/
http://www.example.com/myapp/?page=3,Django将试图匹配myapp/
在解析URL配置时请求方法,如POST,GET,HEAD不会给予考虑,换句话说,对于一个URL的所有的请求
方法将被路由到同一方法,根据请求方法处理分支是视图方法的责任

引入其它URL配置
你的URL配置可以引入其它的URL配置模块,例如:


代码

from  django.conf.urls.defaults  import   *    
  
urlpatterns 
=  patterns( '' ,   
    (r
' ^weblog/ ' , include( ' mysite.blog.urls ' )),   
    (r
' ^photos/ ' , include( ' mysite.photos.urls ' )),   
    (r
' ^about/$ ' ' mysite.views.about ' ),   
)   



这里有一点很重要:这个例子中指向inclue()的正则表达式不包含$(字符串结尾匹配符),但是包含一个
末尾的斜线
每当Django遇到include()时,它将截断匹配的URL并将剩下的部分转交给include的URL配置继续处理
继续这个例子,下面时mysite.blog.urls:

代码

from  django.conf.urls.defaults  import   *    
  
urlpatterns 
=  patterns( '' ,   
    (r
' ^(dddd)/$ ' ' mysite.blog.views.year_detail ' ),   
    (r
' ^(dddd)/(dd)/$ ' ' mysite.blog.views.month_detail ' ),   
)   

 


通过这两个URL配置,下面是一些将被处理的请求的例子:
1,/weblob/2007/,在第一个URL配置里,模式r'^weblog/'会匹配,因为它是一个include(),Django会
截取所有匹配的文本,即这里是'weblob/',然后剩下部分是2007/,它将匹配mysite.blog.urls的第一行
2,/weblog//2007,同样第一个URL配置匹配,截取,剩下的/2007/不会和mysite.blog.urls中的任何
一行匹配
3,/about/,在第一个URL配置中和mysite.views.about匹配,这表明你可以混用include()和
非include()模式

捕获的参数怎样与inclue()工作
include的URL配置从父URL配置接受捕获的参数,例如:


代码

#  root urls.py   
  
from  django.conf.urls.defaults  import   *    
  
urlpatterns 
=  patterns( '' ,   
    (r
' ^(?P<username>w+)/blog/ ' , include( ' foo.urls.blog ' )),   
)   
  
#  foo/urls/blog.py   
  
from  django.conf.urls.defaults  import   *    
  
urlpatterns 
=  patterns( '' ,   
    (r
' ^$ ' ' foo.views.blog_index ' ),   
    (r
' ^archive/$ ' ' foo.views.blog_archive ' ),   
)   


这个例子中,被捕获的username变量传递到include的URL配置,然后传递到匹配的每个视图方法里
注意捕获的参数将一直被传递到include的URL配置的每一行,不管那一行的视图是否认为是合法的参数
由于这个原因,这项技术仅仅当你确认在include的URL配置里每个视图接受你传递的参数时才是有用的

额外URL配置选项怎样与include()工作
同样的,你可以传递额外URL配置选项到include(),就像你可以传递额外URL配置选项到普通视图一样
当你这样做的时候,include的URL配置的每一行都将接受额外选项,例如下面的两种配置是一样的:
配置1:


代码

#  urls.py   
  
from  django.conf.urls.defaults  import   *    
  
urlpatterns 
=  patterns( '' ,   
    (r
' ^blog/ ' , include( ' inner ' ), { ' blogid ' 3 }),   
)   
  
#  inner.py   
  
from  django.conf.urls.defaults  import   *    
  
urlpatterns 
=  patterns( '' ,   
    (r
' ^archive/$ ' ' mysite.views.archive ' ),   
    (r
' ^about/$ ' ' mysite.views.about ' ),   
    (r
' ^rss/$ ' ' mysite.views.rss ' ),   
)   


配置2:

代码

#  urls.py   
  
from  django.conf.urls.defaults  import   *    
  
urlpatterns 
=  patterns( '' ,   
    (r
' ^blog/ ' , include( ' inner ' )),   
)   
  
#  inner.py   
  
from  django.conf.urls.defaults  import   *    
  
urlpatterns 
=  patterns( '' ,   
    (r
' ^archive/$ ' ' mysite.views.archive ' , { ' blogid ' 3 }),   
    (r
' ^about/$ ' ' mysite.views.about ' , { ' blogid ' 3 }),   
    (r
' ^rss/$ ' ' mysite.views.rss ' , { ' blogid ' 3 }),   
)   

 


注意额外选项将一直传递给include的URL配置的每一行,而不管那一行的视图是否认为是合法的选项
由于这个原因,这项技术仅仅当你确认在include的URL配置里每个视图接受你传递的选项时才是有用的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值