尝试将web.py框架中的todolist转移到新浪云中的过程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 一直想尝试用一下新浪云的Python平台,今天下午找个一个空闲将web.py的官方例子todolist转移了一下。感觉还不错,将转移的过程与大家分享一下。 首先感觉新浪云平台的资料太不细了,其实有些例子反而让我有点头晕。

     一直想尝试用一下新浪云的Python平台,今天下午找个一个空闲将web.py的官方例子todolist转移了一下。感觉还不错,将转移的过程与大家分享一下。

首先感觉新浪云平台的资料太不细了,其实有些例子反而让我有点头晕。我将转换中的注意事项与大家分享一下。

1、数据库连接问题。

需要将以前的数据库连接信息改一下,转换成SAE平台的专有信息

#!/usr/bin/env python
# coding: utf-8
import web
import sae.const
db =  web.database(dbn='mysql', user=sae.const.MYSQL_USER, pw=sae.const.MYSQL_PASS, host=sae.const.MYSQL_HOST, port=3307, db=sae.const.MYSQL_DB)

render = web.template.render('templates/', cache=False)

web.config.debug = True

config = web.storage(
    email='oooo@qq.com',
    site_name = '任务跟踪',
    site_desc = '',
    static = '/static',
)


web.template.Template.globals['config'] = config
web.template.Template.globals['render'] = render
print "settings.py is running"

2、官方给的起始例子太迷惑人了。特别是对模板的引用,我感觉没有啥用。我直接改成

render = web.template.render('templates/', cache=False)

3、其它的感觉还好,留下截图与源程序给大家参考,希望对大家有帮助。

index.wsgi

#!/usr/bin/env python
# coding: utf-8
import os
import sae
from config.url import urls
import web

app = web.application(urls, globals()).wsgifunc()
application = sae.create_wsgi_app(app)

todo.py

#!/usr/bin/env python
# coding: utf-8
import web
from config import settings
from datetime import datetime

print "controllers is running..."
render = settings.render
db = settings.db
tb = 'todo'

def get_by_id(id):
    s = db.select(tb, where='id=$id', vars=locals())
    if not s:
        return False
    return s[0]


class New:

    def POST(self):
        i = web.input()
        title = i.get('title', None)
        if not title:
            return render.error('标题是必须的', None)
        db.insert(tb, title=title, post_date=datetime.now())
        raise web.seeother('/')


class Finish:

    def GET(self, id):
        todo = get_by_id(id)
        if not todo:
            return render.error('没找到这条记录', None)
        i = web.input()
        status = i.get('status', 'yes')
        if status == 'yes':
            finished = 1
        elif status == 'no':
            finished = 0
        else:
            return render.error('您发起了一个不允许的请求', '/')
        db.update(tb, finished=finished, where='id=$id', vars=locals())
        raise web.seeother('/')


class Edit:

    def GET(self, id):
        todo = get_by_id(id)
        if not todo:
            return render.error('没找到这条记录', None)
        return render.todo.edit(todo)

    def POST(self, id):
        todo = get_by_id(id)
        if not todo:
            return render.error('没找到这条记录', None)
        i = web.input()
        title = i.get('title', None)
        if not title:
            return render.error('标题是必须的', None)
        db.update(tb, title=title, where='id=$id', vars=locals())
        return render.error('修改成功!', '/')

class Delete:

    def GET(self, id):
        todo = get_by_id(id)
        if not todo:
            return render.error('没找到这条记录', None)
        db.delete(tb, where='id=$id', vars=locals())
        return render.error('删除成功!', '/')


class Index:

    def GET(self):
        todos = db.select(tb, order='finished asc, id asc')
        return render.index(todos)

  

url.py

#!/usr/bin/env python
# coding: utf-8

pre_fix = 'controllers.'

urls = (
    '/',                    pre_fix + 'todo.Index',
    '/todo/new',            pre_fix + 'todo.New',
    '/todo/(\d+)',          pre_fix + 'todo.View',
    '/todo/(\d+)/edit',     pre_fix + 'todo.Edit',
    '/todo/(\d+)/delete',   pre_fix + 'todo.Delete',
    '/todo/(\d+)/finish',   pre_fix + 'todo.Finish',
    '/todo/test','mycontrollers.todo.mytest'
)

  

setttings.py

#!/usr/bin/env python
# coding: utf-8
import web
import sae.const
db =  web.database(dbn='mysql', user=sae.const.MYSQL_USER, pw=sae.const.MYSQL_PASS, host=sae.const.MYSQL_HOST, port=3307, db=sae.const.MYSQL_DB)

render = web.template.render('templates/', cache=False)

web.config.debug = True

config = web.storage(
    email='oooo@qq.com',
    site_name = '任务跟踪',
    site_desc = '',
    static = '/static',
)


web.template.Template.globals['config'] = config
web.template.Template.globals['render'] = render
print "settings.py is running"

  

希望对大家有帮助

 

 

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
10月前
|
监控 前端开发 测试技术
如何实现前端工程化的持续集成和持续部署?
通过以上步骤,可以建立一套完整的前端工程化 CI/CD 流程,实现前端代码从开发、测试、构建到部署的全自动化,提高开发效率、保证代码质量,快速响应用户需求和市场变化。
|
算法 程序员
【算法训练-链表 四】【链表删除】:删除链表的倒数第N个节点、删除有序链表中的重复元素、删除有序链表中的重复元素II
【算法训练-链表 四】【链表删除】:删除链表的倒数第N个节点、删除有序链表中的重复元素、删除有序链表中的重复元素II
149 0
ACM训练题目【糖果传递】
ACM训练题目【糖果传递】
105 0
ACM训练题目【糖果传递】
|
Java 程序员 索引
面试官:equals和hashCode到底有什么关系?
面试官:equals和hashCode到底有什么关系?
160 0
面试官:equals和hashCode到底有什么关系?
|
消息中间件 存储 关系型数据库
支持近似计算
支持近似计算
134 0
|
JavaScript 前端开发
学习javaScript必知必会(4)~事件、事件绑定、取消事件冒泡、事件对象
学习javaScript必知必会(4)~事件、事件绑定、取消事件冒泡、事件对象
205 0
|
1天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1063 0
|
10天前
|
人工智能 运维 安全