GAE 速成简易博客 - 表单处理与数据存取
上节回顾 - 站点基本配置与模板没有数据滋养的首页还是个半残废, 下面开始折腾数据库. 添加文章入口 虽然添加文章这种事情可以直接通过后台暴力搞数据库来做, 但既然要写的是 Web 应用, 那么写个页面提供添加文章的入口也是理所当然的事情. 页面嘛, 肯定得有个 HTML 模板撑着, 来建个文件, templates/add_post.html <html> <head><title>Add Post</title></head> <body> <form> <table> <tr><td>Title</td><td><input type='text' name='title'></td></tr> <tr><td style='vertical-align: top;'>Content</td> <td><textarea name='content'></textarea></td></tr> <tr><td><input type='submit'/></td></tr> </table> </form>
接下来得增加一个 RequestHandler , 新建文件 add_post.py from google.appengine.ext import webapp from google.appengine.ext.webapp import template import os
class AddPostEntry(webapp.RequestHandler): def get(self): path = os.path.join(os.path.dirname(__file__), 'templates/add_post.html') self.response.out.write(template.render(path, dict()))
这个文件看起来与 index.py 差不多, 只不过因为 add_post.html 不需要参数, 因此传入 render 的字典是空字典. 最后在 main.py 中新增一项, 将一个 URL 映射到 AddPostEntry import wsgiref.handlers from google.appengine.ext import webapp
import index import add_post
if __name__ == '__main__': application = webapp.WSGIApplication([ ('/', index.Index), ('/add_post', add_post.AddPostEntry), ], debug=True) wsgiref.handlers.CGIHandler().run(application)
现在访问 http://localhost:8080/add_post/, 就可以看到这个入口页面了. 不过因为表单还没有设置处理者, 因此点破提交按钮就没有反应的. 处理表单 还是得添加一个处理请求的类, 修改 add_post.py, 加入这个类 import model
class AddPostHandler(webapp.RequestHandler): def post(self): new_post = model.Post() new_post.title = self.request.get('title') new_post.content = self.request.get('content') new_post.put() self.redirect('/add_post')
Posted at Jan 19 2012 - 03:31:17
Permanent Link:
/p/477
Load full text
|
Post tags:
Web Server
Tutorial
Google AppEngine
Python
|
GAE 速成简易博客 - 开张
前期准备目前 GAE 官方推荐的 Python 版本是 2.7 (终于脱离了 2.5 的泥潭啊), 实际上 2.6.x 版本也是没问题的 (写个 CMS 这种简易的设备, 应该还用不到太多高端的语言特性). GAE 当然也是必不可少的. 下载和安装步骤在 Google Code 上都有 详细文档. 如果使用 ArchLinux, 还可以通过 AUR 安装. 这里就不废话了. 找个地方, 建立一个目录, 比如叫做 cms-build, 切到这个目录作为工作目录. 下面开始. 数据结构既然是写博客, 那么最关键的当然要是文章 (post) 了. 先来建立用于定义数据的源文件 model.py from google.appengine.ext import db
class Post(db.Model): title = db.StringProperty(multiline=False) content = db.TextProperty()
每篇文章的基本属性有标题 title , 内容 content 和创建时间 date . 其中标题不允许多行; 而内容使用 db.TextProperty 类型而不是 db.StringProperty (根据 GAE 文档, StringProperty 只能存至多 500 字符). 首页模板 首先, 将首页给弄出来, 建立目录 templates, 并在这个目录下弄一个 index.html 文件, 内容是 <html> <head><title>My Blog</title></head> <body> {% for post in posts %} <h1>{{ post.title }}</h1> <p>{{ post.content }}</p> {% endfor %}
在 GAE 中, HTML 模板文件使用的是 django 的模板语法. 上面文件中, {% for ... %} 到 {% endfor %} 是对传入模板的参数 posts 的迭代. {{ post.title }} 则是对 post 对象的 title 的引用, 而 {{ post.content }} 则是引用 content . 简而言之 {% xxx %} 是模板中的控制语句, 而 {{ xxx }} 则是引用值. 在 django 官方网站可以看到 详细文档, 鄙博客之前也对 django 有过 简介. 这个首页是简单了点, 不过呢, 先看看样子. 视图源文件 光有 HTML 模板还不行, 至少, Python 源代码才是核心. 现在添加一个 Python 源文件 index.py
Posted at Jan 19 2012 - 03:30:27
Permanent Link:
/p/476
Load full text
|
Post tags:
Tutorial
Web Server
Template
Python
Google AppEngine
|
django 架设网站入门指南[贰]
上节回顾 – ORM 和数据库创建 admin 应用 打开 guestbook/urls.py 仔细研究一下注释, 会看到有几行写着, 取消注释来激活 admin. django 的 admin 应用是一个非常不错的后台. 现在就来开启它吧 from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover()
urlpatterns = patterns('', # Example: # (r'^guestbook/', include('guestbook.foo.urls')),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs' # to INSTALLED_APPS to enable admin documentation: # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin: (r'^admin/', include(admin.site.urls)),
(r'^$', 'guestbook.home.views.display'), (r'^echo/$', 'guestbook.home.views.echo'), (r'^save/', 'guestbook.home.views.save_message'), )
因为是应用, 所以呢, 还得去 settings.py 登记 INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', 'guestbook.home', )
最后要记得执行数据库同步来创建 admin 相关的表 $ guestbook/manage.py syncdb 现在转到 http://localhost:8000/admin/ 会看到登录提示页面啦. 现在填入第一次 syncdb 时输入的帐号密码就能登入了. 不过现在的 admin 还很挫, 甚至不能管理留言. 进入 guestbook/home 目录, 创建 admin.py 源文件, 加入如下内容 from guestbook.home.models import Message from django.contrib import admin
admin.site.register(Message)
刷新页面, 唉, 没有反应, 因为服务器仅监视那些改动过的文件并重新载入, 这次是单独添加的文件所以没有自动重置, 所以得 重启服务器才行. 然后, 就能在 admin 应用中看到留言对象并修改它们了. 定制 admin
Posted at Feb 04 2010 - 10:14:52
Permanent Link:
/p/77
Load full text
|
Post tags:
django
Tutorial
Web Server
Python
|
django 架设网站入门指南[壹]
上节回顾 – 配置 基本视图和逻辑数据库配置 仍然在 settings.py 中, 找到 DATABASE_ 开头的项目. 现在用 sqlite3 作为数据库, 它已经集成在 python 2.5 以后的版本中, 这样就省去了安装配置的环节. 现在修改这些项目 DATABASE_ENGINE = 'django.db.backends.sqlite3' DATABASE_NAME = 'guestbook/db_file'
这里 DATABASE_NAME 同样需要给出文件的绝对路径, 原理跟之前模板目录那个一样, 如果不能确定每次的工作目录, 那么就填绝对 db_file 的路径吧. 保存设置, 然后执行数据库同步操作 $ guestbook/manage.py syncdb 会输出提示 Creating table auth_permission Creating table auth_group Creating table auth_user Creating table auth_message Creating table django_content_type Creating table django_session Creating table django_site
You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no):
这些是 django 为内置的用户, 会话等类型建立的表, 最后询问是否立即建立一个超级用户. 这里答 yes (仅一个 y 是不行的唉), 然后输入用户名, 电子邮箱和密码. 最后会建立表的索引, 然后结束. 现在, 你可以在 guestbook 目录下看到文件 db_file 了, 它是数据库使用的文件. ORM 和数据库操作 django 的 ORM 非常轻松. 打开 home 目录下的 models.py, 建立留言类型 from django.db import models
class Message(models.Model): name = models.CharField(max_length=32) content = models.CharField(max_length=32) dt = models.DateTimeField(auto_now=True)
注, 使用 django 的 ORM, 该类型需要继承于 models.Model , 而要往数据库中放的数据项, 需要是 models 模块中的对应的域类型. 至于 auto_now=True , 它指出时间和日期在该对象插入数据库时自动使用当前日期时间. 类型弄好了, 得再同步一次数据库. 这些操作可以不重启服务器 $ guestbook/manage.py sql home $ guestbook/manage.py syncdb
回到 guestbook/home/views.py, 增加函数 save_message , 让它将表单数据存入数据库, 并重定向回到首页
Posted at Feb 03 2010 - 14:09:53
Permanent Link:
/p/76
Load full text
|
Post tags:
Web Server
Tutorial
Python
django
ORM
|
django 架设网站入门指南[零]
安装 根据 django 官方文档, 需要 python 2.3 或更高版本. 不过按现在的 python 普及程度, 想必大家的机器上都有 python 2.5 或 2.6 了. 我的操作系统是 ubuntu 9.10, 自带的是 2.6 版本. debian 用户安装 django 很简单, 只需要 # apt-get install python-django 就可以了, 其它发行版看有没有类似的方法. 或者在 官方站点下载源代码安装 祝好运. 建立项目 startproject 首先找到一个地方, 建立一个项目 guestbook, 我们将在这个项目中搭建一个留言板. $ django-admin startproject guestbook 有些系统中 django-admin 并非一个命令, 需要 $ python django-admin.py startproject guestbook 执行完这个之后, 当前目录下会创建一个名为 guestbook 的目录, 里面包含了一个最简单的服务器: 显示一个主页. 执行 $ python guestbook/manage.py runserver 启动后会看到类似以下输出 Validating models... 0 errors found
Django version 1.1.1, using settings 'guestbook.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
这时, manage.py 已经在本地 8000 端口创建了一个服务器, 赶快打开浏览器去访问吧! 为 guestbook/manage.py 加上可执行属性 (在 ubuntu 9.10 下该属性已经自动添加了) $ chmod u+x guestbook/manage.py 创建应用 startapp 在 django 世界的哲学里, 每个功能称之为一个应用. 创建应用也使用 manage.py 来完成. 比如现在用以下命令创建一个首页应用 $ guestbook/manage.py startapp home 这时 guestbook 目录下会多出一个 home 目录, 里面有这些文件 __init__.py models.py tests.py views.py 比较烦的是, 这时得回去修改设置, 打开 settings.py 查找 INSTALLED_APPS , 在这一坨里面加一行 INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'guestbook.home', )
这样 home 应用才算是有了名分. 好, 现在再来实现功能. 因为现在只是处理页面, 所以只需要在 guestbook/home/views.py 里面修修补补就好了. 打开它, 其实相当于是个空文件, 把这一段代码放进去 from django.http import HttpResponse
def display(req): return HttpResponse('<html><body>hello, django!')
我知道你已经不耐烦了, 如果你曾经写 php 的话. 不过现在还有最后一步, 修改路径映射. 打开 guestbook/urls.py, 在里面加一句话
Posted at Feb 03 2010 - 05:02:06
Permanent Link:
/p/74
Load full text
|
Post tags:
Web Server
Tutorial
django
Python
|
0
Page 1
|