python
1.1 python 环境安装
1.1.1 Window平台安装 Python:
python-2.7.11.msi
1.1.2 Linux 平台安装 Python:
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2
tar jxvf /root/Python-2.7.3.tar.bz2
编译安装
cd /root/Python-2.7.3.tar.bz2./configure
make && make install
Python默认安装目录在/usr/local/lib/python2.7
查看一下刚才安装的版本/usr/local/bin/python -V,看到了 2.7.3吧
更改系统默认版本
mv /usr/bin/python /usr/bin/python.bak
export PATH=$PATH:/usr/local/bin/python
ln -s /usr/local/bin/python2.7 /usr/bin/python
1.1.3 Python其它组件安装:
python setup.py install
C:\Python27\Lib\site-packages\Django-1.8.12-py2.7.egg\django\bin
1.2 Python 基础教程
1.3 weblogic健康检查
1.3.1 基于weblogic下 Python:
java -cp /root/wls1032/wlserver_10.3/server/lib/weblogic.jarweblogic.WLST /root/weblogic.py
python a.py
vi /etc/crontab
*/5 * * * * /root/bin/check-status.sh java -cp /root/wls1032/wlserver_10.3/server/lib/weblogic.jar weblogic.WLST/root/weblogic.py
1.4 pythonweb框架之Django
1.4.1 linux安装 Django:
从Django的官网下载tgz包:https://www.djangoproject.com/download/
python setup.py install
1.4.2 新建一个 django project
python django-admin.py startprojectproject-name
一个project 为一个项目,project-name项目名称,改成你自己的,要符合Python 的变量命名规则(以下划线或字母开头)
1.4.3 新建 app
python manage.py startapp app-name
或
django-admin.py startapp app-name
一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。
1.4.4 同步数据库
cd c:\Python27\Lib\site-packages\Django-1.8.12-py2.7.egg\django\bin\computer
pythonmanage.py syncdb
注意:
Django 1.7.1
及以上的版本需要用以下命令
pythonmanage.py makemigrations
python manage.pymigrate
pythonmanage.py runserver
这种方法可以创建表,当你在models.py中新增了类时,运行它就可以自动在数据库中创建表了,不用手动创建。
备注:对已有的models 进行修改,Django 1.7之前的版本的Django都是无法自动更改表结构的,不过有第三方工具 south,详见Django数据库迁移 一节。
1.4.5 使用开发服务器
开发服务器,即开发时使用,一般修改代码后会自动重启,方便调试和开发,但是由于性能问题,建议只用来测试,不要用在生产环境。
pythonmanage.py runserver
#当提示端口被占用的时候,可以用其它端口:
pythonmanage.py runserver 8001
pythonmanage.py runserver 9999
(当然也可以kill掉占用端口的进程)
#监听所有可用 ip (电脑可能有一个或多个内网ip,一个或多个外网ip,即有多个ip地址)
pythonmanage.py runserver 0.0.0.0:8000
#如果是外网或者局域网电脑上可以用其它电脑查看开发服务器
#访问对应的ip加端口,比如 http://172.16.20.2:8000
1.4.6 清空数据库
pythonmanage.py flush
此命令会询问是 yes 还是 no, 选择yes 会把数据全部清空掉,只留下空表。
1.4.7 创建超级管理员
pythonmanage.py createsuperuser
#按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
#修改用户密码可以用:
pythonmanage.py changepassword username
1.4.8 导出数据 导入数据
pythonmanage.py dumpdata appname > appname.json
pythonmanage.py loaddata appname.json
关于数据操作详见:数据导入数据迁移,现在了解有这个用法就可以了。
1.4.9 Django 项目环境终端
python manage.py shell
如果你安装了 bpython 或 ipython 会自动用它们的界面,推荐安装 bpython。
这个命令和直接运行python 或 bpython 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的API,对于操作数据,还有一些小测试非常方便。
1.4.10 数据库命令行
python manage.py dbshell
Django会自动进入在settings.py中设置的数据库,如果是 MySQL 或postgreSQL,会要求输入数据库用户密码。
在这个终端可以执行数据库的SQL语句。如果您对SQL比较熟悉,可能喜欢这种方式。
1.4.11 更多命令
终端上输入 pythonmanage.py 可以看到详细的列表,在忘记子名称的时候特别有用。
1.5 项目例子
Django-1.8.12-py2.7.egg\django\bin
1.5.1 Django结构
1.5.2 bin目录命令
1.5.3 新建项目
python django-admin.py startproject computer
一个project 为一个项目,project-name 项目名称,改成你自己的,要符合Python 的变量命名规则(以下划线或字母开头)
1.5.4 新建 app
python manage.py startapp base
1.5.5 基本组成
1.5.5.1 settings.py
import os
BASE_DIR =os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY ='mmac_9(if64i5pz$j_awu$nv6_zw^dmz0t+mdqqy0+ydyp5v*3'
DEBUG = True
ALLOWED_HOSTS = []
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'base',
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
import os
SITE_ROOT =os.path.join(os.path.abspath(os.path.dirname(__file__)), '..')
STATIC_ROOT = os.path.join(SITE_ROOT,'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
("css", os.path.join(STATIC_ROOT, 'css')),
("js", os.path.join(STATIC_ROOT, 'js')),
("images", os.path.join(STATIC_ROOT, 'images')),
("avatars", os.path.join(STATIC_ROOT, 'avatars')),
("font", os.path.join(STATIC_ROOT, 'font')),
)
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
1.5.5.2 urls.py
from django.conf.urls import url
from django.contrib import admin
from base import views as base_views
urlpatterns = {
url(r'^$', base_views.index, name='index'),
url(r'^main/$', base_views.main, name='main'),
url(r'^com_home/$', base_views.com_home, name='com_home'),
url(r'^com_add_view/$', base_views.com_add_view, name='com_add_view'),
url(r'^com_add/$', base_views.com_add, name='com_add'),
url(r'^com_view_list/$', base_views.com_view_list,name='com_view_list'),
url(r'^com_edit_view/(\d+)/$', base_views.com_edit_view,name='com_edit_view'),
url(r'^com_edit/$', base_views.com_edit, name='com_edit'),
url(r'^com_delete/$', base_views.com_delete, name='com_delete'),
url(r'^admin/', admin.site.urls),
url(r'^ser_home/$', base_views.ser_home, name='ser_home'),
url(r'^ser_add_view/$', base_views.ser_add_view, name='ser_add_view'),
url(r'^ser_add/$', base_views.ser_add, name='ser_add'),
url(r'^ser_view_list/$', base_views.ser_view_list,name='ser_view_list'),
url(r'^ser_edit_view/(\d+)/$', base_views.ser_edit_view,name='ser_edit_view'),
url(r'^ser_edit/$', base_views.ser_edit, name='ser_edit'),
url(r'^ser_delete/$', base_views.ser_delete, name='ser_delete'),
}
1.5.6 项目应用
1.5.6.1 models.py
from django.db import models
class Computer(models.Model):
machine = models.CharField(max_length=20)
ip = models.CharField(max_length=20)
username = models.CharField(max_length=30)
password = models.CharField(max_length=30)
port = models.CharField(max_length=10)
class Meta:
db_table = 'computer'
class Service(models.Model):
server = models.CharField(max_length=30)
port = models.CharField(max_length=10)
url = models.CharField(max_length=100)
machine = models.ForeignKey(Computer)
class Meta:
db_table = 'service'
1.5.6.2 views.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.views.decorators.csrf importcsrf_exempt
from computer.settings import STATIC_URL
from models import Computer
from models import Service
def index(request):
base_url = STATIC_URL
return render_to_response('index.html', {'base_url': base_url})
def main(request):
base_url = STATIC_URL
return render_to_response('main.html', {'base_url': base_url})
def com_home(request):
base_url = STATIC_URL
return render_to_response('com_home.html', {'base_url': base_url})
@csrf_exempt
def com_view_list(request):
jq = ""
if request.method == 'POST':
jq = request.POST['jq'] # 测试是否能够接收到前端发来的name字段
computers = {}
if jq == "":
computers = Computer.objects.all()
else:
computers = Computer.objects.all().filter(machine=jq)
model = {'msg': '成功', 'code': 1, 'expMsg': " ",'data': computers}
return render_to_response('com_list.html', {'model': model})
def com_add_view(request):
base_url = STATIC_URL
return render_to_response('com_add.html', {'base_url': base_url})
@csrf_exempt
def com_add(request):
machine = ""
ip = ""
username = ""
password = ""
port = ""
if request.method == 'POST':
machine = request.POST['machine']
ip = request.POST['ip']
username = request.POST['username']
password = request.POST['password']
port = request.POST['port']
com = Computer(machine=machine, ip=ip, username=username,password=password, port=port)
com.save()
return HttpResponse("添加成功")
def com_edit_view(request, mid):
computers = Computer.objects.get(id=mid)
base_url = STATIC_URL
return render_to_response('com_edit.html', {'base_url': base_url,'computers': computers})
@csrf_exempt
def com_edit(request):
mid = ""
machine = ""
ip = ""
username = ""
password = ""
port = ""
if request.method == 'POST':
mid = request.POST['id']
machine = request.POST['machine']
ip = request.POST['ip']
username = request.POST['username']
password = request.POST['password']
port = request.POST['port']
com = Computer.objects.get(id=mid)
com.machine = machine
com.ip = ip
com.username = username
com.password = password
com.port = port
com.save()
return HttpResponse("修改成功")
@csrf_exempt
def com_delete(request):
mid = ""
if request.method == 'POST':
mid = request.POST['id']
com = Computer.objects.get(id=mid)
com.delete()
return HttpResponse("删除成功")
def ser_home(request):
mid = ""
if request.method == 'GET':
mid = request.GET['machine_id']
base_url = STATIC_URL
return render_to_response('ser_home.html', {"machine_id": mid,'base_url': base_url})
@csrf_exempt
def ser_view_list(request):
machine_id = ""
jq = ""
if request.method == 'POST':
jq = request.POST['jq']
machine_id = request.POST['machine_id']
services = {}
if jq == "":
services = Service.objects.all().filter(machine_id=machine_id)
else:
services = Service.objects.all().filter(server=jq,machine_id=machine_id)
model = {'msg': '成功', 'code': 1, 'expMsg': " ",'data': services}
return render_to_response('ser_list.html', {'model': model})
def ser_add_view(request):
machine_id = ""
if request.method == 'GET':
machine_id = request.GET['machine_id']
base_url = STATIC_URL
return render_to_response('ser_add.html', {'base_url': base_url, 'machine_id':machine_id})
@csrf_exempt
def ser_add(request):
server = ""
port = ""
url = ""
machine_id = ""
if request.method == 'POST':
server = request.POST['server']
port = request.POST['port']
url = request.POST['url']
machine_id = request.POST['machine_id']
com = Service(server=server, port=port, url=url, machine_id=machine_id)
com.save()
return HttpResponse("添加成功")
def ser_edit_view(request, mid):
services = Service.objects.get(id=mid)
base_url = STATIC_URL
return render_to_response('ser_edit.html', {'base_url': base_url,'services': services})
@csrf_exempt
def ser_edit(request):
mid = ""
server = ""
port = ""
url = ""
machine_id = ""
if request.method == 'POST':
mid = request.POST['id']
server = request.POST['server']
port = request.POST['port']
url = request.POST['url']
machine_id = request.POST['machine_id']
com = Service.objects.get(id=mid)
com.server = server
com.port = port
com.url = url
com.machine_id = machine_id
com.save()
return HttpResponse("修改成功")
@csrf_exempt
def ser_delete(request):
mid = ""
if request.method == 'POST':
mid = request.POST['id']
com = Service.objects.get(id=mid)
print com.machine
com.delete()
return HttpResponse("删除成功")
1.5.6.3 Templates
1.5.1.2.1 列表页面
<table id="sample-table"class="table table-bordered table-hover table-condensed">
<thead>
<tr class="table_head_tr">
<th>服务</th>
<th>端口</th>
<th class="hidden-480">url地址</th>
</tr>
</thead>
<tbody>
{% for foo in model.data %}
<tr οnclick="javascript:RowSelect(this);"style="cursor:pointer ; " key="{{ foo.id }}"oldclass="TableRow">
<td>
{{ foo.server }}
</td>
<td><span class="label label-sm label-info arrowedarrowed-righ">{{ foo.port }}</span></td>
<td class="hidden-480">{{ foo.url }}</td>
</tr>
{%endfor %}
</tbody>
</table>
1.5.1.2.2 添加页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!-- basic styles -->
<link href="{{ base_url }}css/bootstrap.min.css"rel="stylesheet" />
<link rel="stylesheet" href="{{ base_url}}css/font-awesome.min.css" />
<!--[if IE 7]>
<link rel="stylesheet"href="{{ base_url }}css/font-awesome-ie7.min.css" />
<![endif]-->
<!-- page specific plugin styles -->
<!-- fonts -->
<link rel="stylesheet"href="http://fonts.googleapis.com/css?family=Open+Sans:400,300" />
<!-- ace styles -->
<link rel="stylesheet" href="{{ base_url}}css/ace.min.css" />
<link rel="stylesheet" href="{{ base_url}}css/ace-rtl.min.css" />
<link rel="stylesheet" href="{{ base_url}}css/ace-skins.min.css" />
<link rel="stylesheet" href="{{ base_url}}css/computer.css" />
<!--[if lte IE 8]>
<link rel="stylesheet"href="{{ base_url }}css/ace-ie.min.css" />
<![endif]-->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<script src="{{ base_url}}js/ace-extra.min.js"></script>
<script src="{{ base_url}}js/framework.js"></script>
<script src="{{ base_url}}js/validator.js"></script>
<script src="{{ base_url }}js/dialog.js"></script>
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements andmedia queries -->
<!--[if lt IE 9]>
<scriptsrc="{{ base_url }}js/html5shiv.js"></script>
<scriptsrc="{{ base_url }}js/respond.min.js"></script>
<![endif]-->
<script type="text/javascript">
//页面加载
var dnAdd;
window.οnlοad=function ()
{
dnAdd=new dnAdd();
};
function dnAdd()
{
var object = this;
this.save=function save(){
Form_JsonSubmit("AddForm");
};
this.cancel=function cancel()
{
//如果是弹出窗口,调用下面语句
vardialog=$getWindow('AddDnDialog');
dialog.Close();
};
this.onSaveSuccess=function onSaveSuccess(result)
{
Dialog.Alert("消息提示",result, function (result) {
object.onCallBack(result)
}, null, 100);
};
this.onCallBack=function onCallBack(result)
{
vardialog=$getWindow('AddDnDialog');
if (dialog.Refresh)
{
dialog.Refresh();
}
dialog.Close();
};
};
</script>
<style type="text/css">
.tabletbody>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:0pxsolid #ddd}
</style>
</head>
<body style="background-color:#FFFFFF;" >
<!-- PAGE CONTENT BEGINS -->
<form id="AddForm"method="post" action="/com_add/"onSuccess="dnAdd.onSaveSuccess" οnsubmit="javascript:returnForm_JsonSubmit(this)" class="form-horizontal"style="padding-left: 50px; width: 70%; padding-top: 20px;" >
<table class="table">
<tr>
<td>
<labelfor="inputEmail3" class="control-label">机器</label>
</td>
<td>
<inputname="machine" type="text" class="form-control"id="inputEmail3" placeholder="机器">
</td>
</tr>
<tr>
<td>
<labelfor="inputPassword3" class="control-label">IP地址</label>
</td>
<td>
<input name="ip"type="text" class="form-control"id="inputPassword3" placeholder="ip地址">
</td>
</tr>
<tr>
<td>
<labelfor="inputPassword3" class="control-label">用户名</label>
</td>
<td>
<inputname="username" type="text" class="form-control"id="inputPassword3" placeholder="用户名">
</td>
</tr>
<tr>
<td>
<label for="inputPassword3"class="control-label">密码</label>
</td>
<td>
<inputname="password" type="text" class="form-control"id="inputPassword3" placeholder="密码">
</td>
</tr>
<tr>
<td>
<labelfor="inputPassword3" class="control-label">端口</label>
</td>
<td>
<input name="port"type="text" class="form-control"id="inputPassword3" placeholder="端口">
</td>
</tr>
</table>
</form>
<div class="bottomButton">
<div class="col-sm-offset-2 col-sm-8">
<button type="button" class="btn btn-default"οnclick="javascript:dnAdd.save();">保存</button>
<button type="button" class="btn btn-default"οnclick="javascript:dnAdd.cancel();">取消</button>
</div>
</div>
<!--[if !IE]><!-->
<scripttype="text/javascript">
window.jQuery || document.write("<script src='{{ base_url}}js/jquery-2.0.3.min.js'>"+"<"+"script>");
</script>
<!--<![endif]-->
<!--[if IE]>
<script type="text/javascript">
window.jQuery || document.write("<script src='{{ base_url}}js/jquery-1.10.2.min.js'>"+"<"+"script>");
</script>
<![endif]-->
<scripttype="text/javascript">
if("ontouchend" in document) document.write("<scriptsrc='{{ base_url}}js/jquery.mobile.custom.min.js'>"+"<"+"/script>");
</script>
<!--[if lte IE 8]>
<script src="{{ base_url}}js/excanvas.min.js"></script>
<![endif]-->
<script src="{{ base_url}}js/bootstrap.min.js"></script>
<script src="{{ base_url}}js/typeahead-bs2.min.js"></script>
<!-- page specific plugin scripts -->
<script src="{{ base_url}}js/cr.js"></script>
<!-- ace scripts -->
<script src="{{ base_url}}js/ace-elements.min.js"></script>
<script src="{{ base_url}}js/ace.min.js"></script>
</body>
</html>