2 编写控制器
更多文章请关注: https://eightplus.github.io/
在web2py/applications/welcome/controllers目录下,是各种控制器文件,default.py是默认的控制器文件,这里我们先创建另外一个控制器文件test.py来体验下控制器的作用,内容编写如下:
#-*-coding:utf-8-*-
__author__ = 'lixiang'
def index():
return "Hello World"
def func_test():
return "Test web2py controllers."
执行python web2py.py启动服务器,然后浏览器输入:http://127.0.0.1:8000/welcome/test,结果如下图:
接着浏览器输入:http://127.0.0.1:8000/welcome/test/func_test,结果如下图:
了解了下控制器后,我们接着修改默认控制器文件default.py的index()函数,如图:
从上图可以看到一行代码:return redirect(URL('sysmanage', 'sys_manage'),所以我们需要在控制器目录下新建一个sysmanage.py文件,里面要有sys_manage函数,完整代码如下:
#系统配置
#@auth.requires_login()
def sys_manage():
import os
import socket,netifaces
from collections import OrderedDict
import fcntl
import struct
def get_ip_address():
try:
csock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
csock.connect(('8.8.8.8',80))
(addr, port) = csock.getsockname()
csock.close()
return addr
except socket.error:
return '127.0.0.1'
def meminfo():
def get_meminfo():
meminfo = OrderedDict()
with open('/proc/meminfo') as f:
for line in f:
meminfo[line.split(':')[0]] = line.split(':')[1].strip()
return meminfo
meminfo = get_meminfo()
memavi = int(str(meminfo['MemAvailable'])[:-3]) / (1024.0 * 1024.0)
meninfo = str(memavi)[0:4]
return meninfo
hostname = socket.gethostname()
ip = get_ip_address()
iplist = socket.gethostbyname_ex(hostname)
gateway = netifaces.gateways()['default'][netifaces.AF_INET][0]
name = netifaces.gateways()['default'][netifaces.AF_INET][1]
for interface in netifaces.interfaces():
if interface == name:
macaddr = netifaces.ifaddresses(interface)[netifaces.AF_LINK][0]['addr']
netmask = netifaces.ifaddresses(interface)[netifaces.AF_INET][0]['netmask']
mem = meminfo()
form = FORM(TABLE(P(_class="divider"),
TR('网卡:',name
),
TR('MAC:', macaddr
),
TR('IP 地址:',ip
),
TR('网关:',gateway,
),
TR('子网掩码:',netmask,
),
TR('网站版本:', '1.0.0',
),
P(_class="divider"),
)
)
if form.accepts(request, session):
redirect(URL('default','index'))
return dict(form=form)
因为使用了表单,所以我们需要在applications/welcome/views/目录下新建一个对应的sysmanage目录,里面新建一个对应的sys_manage.html文件,文件内容如下:
{{extend 'layout.html'}}
<h2>系统配置
<div>
</div></h2>
<div style="width:100%;height:1px;padding:0px;background-color:#D5D5D5;overflow:hidden;"></div>
<p></p>
{{=form}}
上述修改完成后,不需要重启服务器,整个过程都是热部署的,浏览器输入:http://127.0.0.1:8000/welcome/即可看到下图的效果(默认调用default.py中的index()函数):
如果浏览器刷新时有错误显示,可以在applications/admin/models/0.py中设置:
# if visible_apps is not empty only listed apps will be accessible
FILTER_APPS = []
将FILTER_APPS = []修改为FILTER_APPS = [welcome],即加应用的名字,设置完之后就能直接打开error tickets看错误日志了,即每次刷新浏览器如果报错,则会在/applications/welcome/errors/目录下生成一个记录报错信息的日志文件。
如果遇到报错,可能是你的系统缺失一下依赖包,可以安装如下包后再试试效果:
sudo apt-get install python-mysqldb python-netifaces python-gluon apache2 libapache2-mod-wsgi python-psycopg2 isomd5sum python-matplotlib python-reportlab mercurial