对应数据库编码
在django的settings.py中增加这样一行: DEFAULT_CHARSET = 'GB2312' 可以指定编码.否则默认是utf-8 数据库又不是这个编码,导致取出来是乱码,改了就好了
建立数据库模型
建立模型,首先必须先建立一个app 一个app是Django的可移动功能集,可以使用更大一层的project的配置,有点像java的jar包 在刚才成功配置了数据库连接的project下执行 python manage.py startapp books 建立了一个名为books的app 编辑app下的models.py,写入想要建立的模型,比如: 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() class Author(models.Model):salutation = models.CharField(maxlength=10)first_name = models.CharField(maxlength=30)last_name = models.CharField(maxlength=40)email = models.EmailField()headshot = models.ImageField(upload_to='/tmp') class Book(models.Model):title = models.CharField(maxlength=100)authors = … 繼續閱讀
django连接oracle
到http://www.python.net/crew/atuining/cx_Oracle/下载适配器cx_Oracle 打开settings.py文件,配置oracle连接: DATABASE_ENGINE = 'oracle' # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.DATABASE_NAME = 'bill' # Or path to database file if using sqlite3.DATABASE_USER = 'acct' # Not used with sqlite3.DATABASE_PASSWORD = '' # Not used with sqlite3.DATABASE_HOST = '' # Set … 繼續閱讀
模板的进阶使用
模板多了,需要减少冗余,尽量坐到重用 不但可以减少输入量,也可以方便管理. 一个模板中可以include另外一个模板被引入模板的名字可以用单/双引号括起来{% include 'nav.html' %}{% include "nav.html" %}也可以放到变量里面{% include template_name %}程序自然是到指定的TEMPLATE_DIRS 中去找模板,所以引入的时候也可以带路径被引入的模板如果需要填充,则用父模板的context来填充.模板可以继承 include 模板还是以新页面作为主题,重用模板作为组件来添加而继承则是以重用模板作为主体,修改的内容作为添加内容来组合出页面.比如,建立下面一个用来被继承的模板:
My helpful timestamp site
{% block content %}{% endblock %}{% block footer %}Thanks for visiting … 繼續閱讀
django的模板系统
其实现在的很多web技术,像java,同样也是使用了模板技术.否则将htm混杂在代码中,是很难维护,很乱很恐怖的事情模板中的一些定义: 用{{}}包围的是变量 用{%%}包围的是块标签,如{%if ordered_warranty%}块标签的含义很丰富,它告诉模板系统做一些事情 过滤器 设置模板路径:settings中的变量TEMPLATE_DIRS定义了模板所在的路径.TEMPLATE_DIRS = (‘C:\Documents and Settings\Administrator\mysite\\templates’,# Put strings here, like “/home/html/django_templates”.# Always use forward slashes, even on Windows.)非常奇怪,mysite下面的包templates一定要用\\,否则会被转换为mysite templates报告找不到文件.在程序中取得模板,需要import这个模块:from django.template.loader import get_template然后:t = get_template(‘current_datetime.html’)这样就建立了一个模板对象t在配置的模板路径中能找到这个文件,自然没问题. 现在还没建立模板文件,在templates中建立内容为:
It is now {{ current_date }}. 的文件current_datetime.html修改view,增加如下代码:from django.template.loader import get_templatefrom django.template import … 繼續閱讀django的模板系统
其实现在的很多web技术,像java,同样也是使用了模板技术.否则将htm混杂在代码中,是很难维护,很乱很恐怖的事情模板中的一些定义: 用{{}}包围的是变量 用{%%}包围的是块标签,如{%if ordered_warranty%}块标签的含义很丰富,它告诉模板系统做一些事情 过滤器 设置模板路径:settings中的变量TEMPLATE_DIRS定义了模板所在的路径.TEMPLATE_DIRS = ('C:\Documents and Settings\Administrator\mysite\\templates',# Put strings here, like "/home/html/django_templates".# Always use forward slashes, even on Windows.)非常奇怪,mysite下面的包templates一定要用\\,否则会被转换为mysite templates报告找不到文件.在程序中取得模板,需要import这个模块:from django.template.loader import get_template然后:t = get_template(‘current_datetime.html’)这样就建立了一个模板对象t在配置的模板路径中能找到这个文件,自然没问题. 现在还没建立模板文件,在templates中建立内容为:
It is now {{ current_date }}. 的文件current_datetime.html修改view,增加如下代码:from django.template.loader import get_templatefrom django.template import … 繼續閱讀启动django的bat
每次启动django,都要进入cmd,然后命令又记不住.干脆写个bat来启动:@echo offpython C:\Documents and Settings\Administrator\mysite\manage.py runserverecho.echo ______________________________echo.echo Script processing has ended.echo Press any key to exit. . .pause>nul 结果报告找不到Documents忘记了是在笨笨的windows下,加了引号就可以了:@echo offpython “C:\Documents and Settings\Administrator\mysite\manage.py” runserverecho.echo ______________________________echo.echo Script processing has ended.echo Press any key to exit. . .pause>nul 直接启动有问题,要到他的目录下启动,于是改为: @echo offcd “C:\Documents … 繼續閱讀
高质量的url
还记得带参数的url吗?java和php构建的web程序中,经常可以见到这种? &漫天飞的url:比如想要3个小时以后的时间,可能就会这样:/now/plus?hours=3混乱而且土django利用python强大的正则表达式避免了这个问题,同一个问题,django可以这样传参:/now/plus3hours/更加简洁优雅因为数字是变化的,url匹配自然需要更改:(r'^now/plus\d{1,2}hours/$', hours_ahead),表示匹配1位或2位数值,3位以上的数值这里就界定为非法数据,不再匹配,否则用户输入一个/now/plus99999999999999999999hours/怎么办?写好url匹配,需要写对应的处理:hours_aheadhours_ahead如何才能从url取得参数呢?通过django调用函数的时候,首先传入一个必要参数HttpResponse对象.这是必有的而后对于动态匹配url的,会传入一个string,这个string就是动态匹配的内容,如果是上面的url,那自然就是传入’3′如果url匹配多个值?如何传入?这个稍后说.def hours_ahead(request, offset):offset = int(offset)dt = datetime.datetime.now() datetime.timedelta(hours=offset)html = "In %s hour(s), it will be %s." % (offset, dt)return HttpResponse(html)把string转为int,然后想干嘛就干嘛,这里就不废话了..打开http://127.0.0.1:8000/now/plus3hours/看看是否正确的干活了
第一个动态页面
建立一个返回当前时间的页面返回给用户页面需要一个HttpResponse对象需要返回的html文本作为一个参数传递给HttpResponse对象写好的py文件放在Python PATH目录下,让python能找到就可以.from django.http import HttpResponseimport datetimedef current_datetime(request):now = datetime.datetime.now()html = "It is now %s." % nowreturn HttpResponse(html)django如何调用返回HttpResponse对象的py文件呢?秘密就在urls.py文件,生成项目的时候,就会生成这个文件.urls.py的作用就是告诉django:发现用户请求这个url,那就调用这个.py 发现用户请求那个url,那就调用那个url打开urls.pyfrom django.conf.urls.defaults import *urlpatterns = patterns(”,# Example:# (r’^mysite/’, include(‘mysite.apps.foo.urls.foo’)),# Uncomment this for admin:# (r’^admin/’, include(‘django.contrib.admin.urls’)),)这里主要看的就是变量urlpatterns,它定义了URL和处理URL的代码的映射patterns用户返回生成urlpatterns,patterns的每个参数都是一个tuple每个tuple表示一个url每个tuple包括两个元素:第一个是一个正则表达式,用于匹配url第二个元素指定要调用的py对象^ 首行匹配$ 行尾匹配 返回时间的代码保存为view.py,放到mysite下面修改urls.py为:from django.conf.urls.defaults import *from mysite.views import … 繼續閱讀
启动django的bat
每次启动django,都要进入cmd,然后命令又记不住.干脆写个bat来启动:@echo offpython C:\Documents and Settings\Administrator\mysite\manage.py runserverecho.echo ______________________________echo.echo Script processing has ended.echo Press any key to exit. . .pause>nul 结果报告找不到Documents忘记了是在笨笨的windows下,加了引号就可以了:@echo offpython “C:\Documents and Settings\Administrator\mysite\manage.py” runserverecho.echo ______________________________echo.echo Script processing has ended.echo Press any key to exit. . .pause>nul 直接启动有问题,要到他的目录下启动,于是改为: @echo offcd “C:\Documents … 繼續閱讀