python-web.py开发入门(推荐) 原

浅显易懂,推荐 

课程地址:https://www.imooc.com/learn/753

 一、课程介绍

web.py官网:http://webpy.org

版本基本不会更新,作者去世

pip install web.py #在python2.7环境下
pip3 install web.py--0.40-dev1 #在python3环境下

安装webpy

import web
        
urls = (
    '/(.*)', 'hello'
)
app = web.application(urls, globals())

class hello:        
    def GET(self, name):
        if not name: 
            name = 'World'
        return 'Hello, ' + name + '!'

if __name__ == "__main__":
    app.run()

新建hello.py

python hello.py

输入运行文件命令。(我这里pycharm2018.2不晓得为嘛terminal调整不了字间距,而且文件路径的/都变了,文字颜色也不晓得哪里能改,其他地方的显示都正常也能修改,这里除了文字大小能调整外,别的都不起作用。TVT)

返回0.0.0.0:8080

浏览器访问127.0.0.1:8080

——————————————————————————————————————

PS:0.0.0.0与127.0.0.1区别:https://blog.csdn.net/searchwang/article/details/33804265

0.0.0.0

严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。

127.0.0.1

本机地址,主要用于测试。用汉语表示,就是“我自己”。在Windows系统中,这个地址有一个别名“Localhost”。寻址这样一个地址,是不能把它发到网络接口的。除非出错,否则在传输介质上永远不应该出现目的地址为“127.0.0.1”的数据包。

127.0.0.1与本地IP:127.0.0.1是自环地址,也就是回路地址,PING通了说明网卡没有问题,因此发往127的消息不会出网卡。

————————————————————————————————————————

二、web.py开发

1.demo

name

一些前课程前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>hello</title>
    <style>
        div p{color: #f00;}
        .py{font-size: 40px}
        #l1{width: 200px;font-size: 40px}
    </style>
</head>
<body>
    <h1>hello</h1>
    <div>World</div>
    <p class="py">python</p>
    <label id ='l1'>test</label>
    <div>
        <a href="javascript:void(0)" onclick="javascript:show_text('l1','my frist js')">my frist js</a>
        <a href="javascript:void(0)" onclick="javascript:show_text('l1','hello python')">hello python</a>
        <a href="javascript:void(0)" onclick="javascript:show_color('l1','#f00')">red</a>
        <a href="javascript:void(0)" onclick="javascript:show_color('l1','#0f0')">green</a>
    </div>
    <script>
        function show_text(id, text) {
            document.getElementById((id)).innerHTML=text
        }
        function show_color(id, color) {
            document.getElementById(id).style.color=color
        }
    </script>
</body>
</html>

新建1.html文件

测试返回1.html内容

2.web.py学习

(1)url映射

import web
urls = (
    '/index', 'index', #精确匹配
    '/blog/\d+','blog', #模糊匹配-带组
    '/(.*)','hello' #模糊匹配-不带组
) # 注意:url里有多个使用模糊匹配,模糊匹配范围大的要放在小的后面
app = web.application(urls, globals())
class index:
    def GET(self):
        return 'index method'
class blog:
    def GET(self):
        return 'blog method'
    def POST(self):
        return 'blog post method'
class hello:
    def GET(self, name):
        return 'hello' + name
if __name__ == "__main__":
    app.run()

hello.py获取路径

(2)请求处理

A.请求参数获取

添加参数获取

<!DOCTYPE html>
<html lang="en">
<head>
    <title>hello</title>
</head>
<body>
    <h1>POST</h1>
    <form action="/blog/123" method="POST">
        <input type="username" name="username" value="">
        <input type="password" name="password" value="">
        <input type="submit" value="submit">
    </form>
</body>
</html>

新建2.html

import web
urls = (
    '/index', 'index', #精确匹配
    '/blog/\d+','blog', #模糊匹配-带组
    '/(.*)','hello' #模糊匹配-不带组
) # 注意:url里有多个使用模糊匹配,模糊匹配范围大的要放在小的后面
app = web.application(urls, globals())
class index:
    def GET(self):
        query = web.input()
        return query
class blog:
    def GET(self):
        query = web.input()
        return query
    def POST(self):
        data = web.input()
        return data
class hello:
    def GET(self, name):
        return open(r'2.html').read()
if __name__ == "__main__":
    app.run()

hello.py

B.请求头获取

import web
urls = (
    '/index', 'index', #精确匹配
    '/blog/\d+','blog', #模糊匹配-带组
    '/(.*)','hello' #模糊匹配-不带组
) # 注意:url里有多个使用模糊匹配,模糊匹配范围大的要放在小的后面
app = web.application(urls, globals())
class index:
    def GET(self):
        query = web.input()
        return query
class blog:
    # def GET(self):
    #     query = web.input()
    #     return query
    def GET(self):
        return web.ctx.env
    def POST(self):
        data = web.input()
        return data
class hello:
    def GET(self, name):
        return open(r'2.html').read()
if __name__ == "__main__":
    app.run()

(3)相应处理

A.模板文件读取

pip install pymysql #python3

定义模板主目录

添加文章路径

无参数render

B.获取数据结果

建立数据库信息

$def with(r)
<html lang="en">
<head>
    <title>article</title>
</head>
<body>
    <h1>文章列表</h1>
    <ul>
        $for l in r:
            <li>$l.get('aid') => $l.get('title')</li>
    </ul>
</body>
</html>

新建article.html

import pymysql #python3
pymysql.install_as_MySQLdb()
class article:
    def GET(self):
        conn =pymysql.connect(host='localhost',user='root',passwd='root',db='py_webpy',cursorclass=pymysql.cursors.DictCursor)
        cur=conn.cursor()
        cur.execute('select * from articles')
        r = cur.fetchall()
        cur.close()
        conn.close()
        print(r)
        return  render.article(r)

首页跳转

import web
# import MySQLdb #python2
# import MySQLdb.cursors
import pymysql #python3
pymysql.install_as_MySQLdb()
render = web.template.render('templates') #定义模板
urls = (
    '/article','article',
    '/index', 'index', #精确匹配
    '/blog/\d+','blog', #模糊匹配-带组
    '/(.*)','hello' #模糊匹配-不带组
) # 注意:url里有多个使用模糊匹配,模糊匹配范围大的要放在小的后面
app = web.application(urls, globals())
class index:
    def GET(self):
        query = web.input()
        # return query
        return web.seeother('/article') #跳转到文章页面,也可以跳转外部网站
class blog:
    # def GET(self):
    #     query = web.input()
    #     return query
    def GET(self):
        return web.ctx.env
    def POST(self):
        data = web.input()
        return data
class hello:
    def GET(self, name):
        # return open(r'2.html').read()
        # return render.hello2()
        return render.hello2(name) #引用模板-带参数
class article:
    def GET(self):
        conn =pymysql.connect(host='localhost',user='root',passwd='root',db='py_webpy',cursorclass=pymysql.cursors.DictCursor)
        cur=conn.cursor()
        cur.execute('select * from articles')
        r = cur.fetchall()
        cur.close()
        conn.close()
        print(r)
        return  render.article(r)
if __name__ == "__main__":
    app.run()

hello.py

三、分析

初始化数据库表结构脚本

classname必须有

密码生成一个铭文的

代码分析

首页内容

相关

查找的github上相关代码:https://github.com/sunchen009/chouyangblog

完结

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大葡萄元元

优化网站加载速度的14个技巧

优化了加载速度的网站不仅可以提高其搜索引擎的排名,同时也可以降低网站的跳出率,提高其转换率,还能提供更好的终端用户体验,这是当今基于Web环境取得成功的关键。

15830
来自专栏熊二哥

IntellijIDEA快速入门(Windows版)

跟随公司变更技术堆栈的步伐,开始学习相应工具IntelliJ的使用,之前一个大神同时也提到,最近该IDE的市场份额已然超越了免费的Eclipse,因此该工具已经...

19870
来自专栏美丽应用

给安卓Chrome加入主页按钮

98120
来自专栏Python中文社区

优雅的在终端中编写Python

專 欄 ❈PytLab,Python 中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Python,C,C++。熟悉数值算法(最优化方法,蒙...

34070
来自专栏人工智能LeadAI

优雅的在终端中编写Python

最早我也只是在服务器上编辑文件的时候用用vim来改改程序,并没有把vim当做自己的主力编辑器。但是偶然的一次机会需要改一个奇葩的输入文件的格式,用了下Vim的宏...

23010
来自专栏Web项目聚集地

IDEA入门级教程(文末常用快捷键)

IDEA相对于eclipse来说最大的优点就是它比eclipse聪明。聪明到什么程度呢?我们先来看几个简单的例子。

14230
来自专栏Jerry的SAP技术分享

SAP CRM和C4C的客户主数据修改历史记录查询

Change History assignment block里显示出了这条修改记录:

33320
来自专栏Jack-Cui

Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)

运行平台: Windows Python版本: Python3.x IDE: Sublime text3 1 前言     近期,有些朋友问我一些关于...

85970
来自专栏恰童鞋骚年

自己动手写工具:自动点击小插件

  当我们需要对一个网页上的某个按钮进行多次点击以求得某种“好处”的时候,例如天猫的抢红包活动,我们可能需要点击N次之后才有可能获得一个红包,但是这个N是一个未...

29120
来自专栏编程

在 Vim 编辑器中开发 Python 应用的 Vim 插件

Python-mode 是一个 Vim 插件,它使你能够在 Vim 编辑器中更快的利用包括 pylint、rope、pydoc、pyflakes、pep8、au...

33480

扫码关注云+社区

领取腾讯云代金券