Python 作为一门流行语言,用的人不少,但大多介绍都是用于爬虫,而且仅仅适用于个人使用,如何能够利用这个工具与他人进行交互,从而实现广泛的应用?本文提供一个简单的例子,基于Django。
Python下有许多款不同的 Web 框架。Django是最有代表性的一位。
一个简单的功能,Django配置相对简单,本人在某个程序中,发现需要实现一些功能还是需要注意很多实现,这里简单归几个注意点。
(本文中用python 3)
本文做一个简单的检查网站是否可达来作为例子。
一、默认安装
安装教程可见:https://www.runoob.com/django/django-install.html,很简单。
这些有很多安装教程,就不在这里介绍了。
二、建立自己的网站
Django 创建自己的项目,使用管理工具 django-admin 即可。
django-admin 的命令如下:
django-admin startproject ipcheck:
创建完成后我们可以查看到python目录下有如下的一些目录:
ipcheck
|-- ipcheck (这个是子目录)
| |-- init.py
| |-- settings.py
| |-- urls.py
| |-- wsgi.py
|-- manage.py
为了方便,在ipcheck下再建立一个templates的目录,存放网页模板
同时创建一个网页文件 ipcheck.html (具体内容后面再说)
同时也在ipcheck下建立一个程序 ipcheck.py(具体内容后面再说)
ipcheck
|-- ipcheck (这个是子目录)
| |-- _init_.py
| |-- settings.py
| |-- urls.py
| |-- wsgi.py
| |-- ipcheck.py
|-- templates
| |-- ipcheck.html
| |-- wsgi.py
|-- manage.py
|-- db.sqlite3 (这个文件主要用于数据处理,本文不需要)
安装完成后,启动 网站 python manage.py runserver 0.0.0.0:8000
注意:
(1)runserver 是 manage.py 的功能参数
(2)0.0.0.0 让其它电脑可连接到开发服务器,8000 为端口号(也是默认值)。如果需要,也可以设置为其他端口,如8888、9999。
如下图表示正常启动,否则会出现错误:
在浏览器输入你服务器的 ip(这里我们输入本机 IP 地址: 127.0.0.1:8000) 及端口号,如果正常启动,输出结果如下:
下面就可以开始做我们的事情了。
三、建立自己的网站
这里先说明几个文件,在ipcheck下的各种.py这些python文件,是处理各种请求的后台软件:
_init_.py 告诉 Python 该目录是一个 Python 包,无须理会。
settings.py是配置文件,
urls.py 是进行url解释,需要根据程序要求进行配置
wsgi.py 用于兼容 WSGI 的Web 服务器入口,无须理会
其他程序就是可以自己来处理了
如果添加了ipcheck后(含ipcheck.py和ipcheck.html),再运行就会出现如下的界面,此时就通过访问 127.0.0.0:8000/ipcheck来浏览我们的程序了。
此时运行 127.0.0.1/admin 就会出现Django的默认登录界面
四、ipcheck
目标:把ip地址或者网址输入,然后检查是否可以ping通。如下图:
1、ipcheck.py 的代码
在templates 下,建立 ipcheck.html
主要是提供输入界面,可以输入地址或网址,然后检查地址是否返回值。
代码如下:
<html>
<head>
<meta charset="utf-8">
<title>检查IP地址或网址title>
head>
<body>
<p>请输入IP地址或网址(多网地址请用分号;隔开) :<br>
p>
<form action="/ipcheck/" method="post">
{% csrf_token %}
<textarea cols=60 rows=10 name="IPAddr">
www.baidu.com
textarea>
<p><input type="submit" value="检查网址">p>
form>
<p>{{ rlt }}p>
body>
html>
由于 Django的默认配置中没有templates目录,所以首先要修改settings.py 文件中 TEMPLATES定义的路径(如果不改正确,会无法找到ipcheck.html),如下图:
然后就可以建立我们的处理程序 ipcheck.py 了,该程序应该存放在ipcheck目录下。
程序中应用的库多了一些,可以重新筛选一下。
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import os
from xml.sax.saxutils import unescape
from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.shortcuts import render
from django.views.decorators import csrf
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
# 首先定义ping检查程序,该检查方法会在无法ping通时返回时间很慢
def isPingOK(testserver):
try:
exit_code = os.system('ping '+testserver+' >nul')
if exit_code :
return False
else:
return True
except Exception as e:
return False
# 接收POST请求数据并处理
def IPCheck(request):
ctx ={}
if 'IPAddr' in request.POST:
ctx['rlt'] = request.POST['IPAddr']
s = ctx['rlt']
urls = s.split(';')
print('post= '+s+'\n\r')
ctx['rlt'] = ''
for url in urls:
print(url+'\n\r')
isOK = isPingOK(url)
if isOK:
ctx['rlt'] += url+' ping OK ===='
else:
ctx['rlt'] += url+' ping error ====='
else:
ctx['rlt'] = ""
rethtml = "ipcheck.html"
return render(request, rethtml, ctx)
以上代码测试正常,运行 python manage.py runserver 0.0.0.0:8000,会提示已经正常
Performing system checks...
System check identified no issues (0 silenced).
November 05, 2019 - 11:02:10
Django version 2.1, using settings 'ipcheck.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CTRL-BREAK.
然后再浏览器中输入 http://127.0.0.1:8000/ipcheck
会出现如下界面
在国内,是无法访问google的,加上google,则结果如下:
附录:
这个程序只适合练习,其中ping的速度很慢,显示也不漂亮,代码也有多处可以优化。有时在不同浏览器下回出现错误。
请大家检查并提出优化方案,本人后续加以改善。