提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言 因为python适合新手,部署快速,支持异步, 我们如果想要开发一个网站,我推荐用python+tornado。
提示:以下是本篇文章正文内容,下面案例可供参考
一、tornado是什么?tornado是一个网络库,支持异步的
二、使用步骤 1.下载并使用windows键+r键会有一个小窗口,在里面输入“cmd”后回车,就能打开命令行。
确保你已经在环境变量中加入py这一条了(具体看别的教程)
在命令行中输入pip install tornado(或sudo apt-get install tornado)
在python文件夹里的Lib(注意不是libs)里找到tornado。
接下来教材都没讲过!如没找到,就如下操作。windows路径在C:UsersAdministratorAppDataLocalPackagesPythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0LocalCachelocal-packagesPython37site-packages,在里面找到tornado后放到Lib里(差点忘了,Lib路径是C:UsersAdministratorAppDataLocalprogramspythonpython3xLib)
之后就可以愉快地写hello world程序了:
import tornado.web
import tornado.ioloop
import tornado.httpserver
from tornado.options import define
define('port', default=80, type=int)
class TestHandler(tornado.web.RequestHandler):
def get(self):
self.write(""+
"Hello World!" "+
"Hello,World!")
def main():
app = tornado.web.Application([
(r'/',TestHandler),
],)
httpserver=tornado.httpserver.HTTPServer(app)
tornado.options.parse_command_line()
httpserver.bind(tornado.options.options.port)
httpserver.start(1)
tornado.ioloop.IOLoop.current().start()
dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
logging.info(filename)
if name=="__main__":
main())
2.动态网页
啥也不说,上代码!!!
演示地址:192.168.31.102或192.168.31.100或其他(可能无法访问,是因为服务器关了或内网映射没开)
保存在C:ark
Ark.py:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2022/1/28/10:37
# @Author : Mr.wen
# @File : NoahServer.py
# @Software: VScode
import socket
import re
import ssl
#import pymysql
#import pymongo
import sqlite3
import threading
import os
import sys
import requests
import time
import logging
import json
import hashlib
import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpserver
import tornado.log
import datetime
#import module.log_tk
import module.flagundo
from tornado.escape import json_encode
#collection = worddb.collection_names()
class CanNotCreateTableError(KeyError):
pass
_Ip = socket.gethostbyname(socket.gethostname())
ip = requests.get('https://checkip.amazonaws.com').text.strip()
tornado.options.define('port', default=80, type=int)
print(ip)
#undo=undo.undo()
conn=sqlite3.connect("word")
cur=conn.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS `wordtable`(
ID TEXT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
TEXT TEXT NOT NULL);''')
conn.commit()
conn.close()
class baseHandler(tornado.web.RequestHandler):
def select(self):
pass
class ForumHandler(baseHandler):
def get(self):
self.render("postforum.html", **{"post": ""})
def post(self):
global count
count_big = 0
count_small = 0
conn=sqlite3.connect("word")
cur=conn.cursor()
print(self.request.remote_ip)
inputPost = self.get_argument("post")
try:
inputPost = str(inputPost)
except:
inputPost = inputPost
print(inputPost)
insertSql="""INSERT INTO wordtable (ID,TEXT)
VALUES (?,?)"""
try:
cur.execute(insertSql,(count,inputPost))
except:
print("sqlite3 write error-->",sys.exc_info())
self.render("postforum.html", **{"post": ""})
count_small=count_small+1
if count_small == 45:
count_big+=1
conn.commit()
conn.close()
class LoginHandler(baseHandler):
def post(self):
self.render("login.html",**{"login": ""})
username=self.get_argument("username")
password_md5 = self.get_argument("password")
print(username,password_md5)
def main():
global _Ip
global ip
_IP_log = 'ip ' +_Ip + ' ...ok'
print(_IP_log)
if tornado.options.options.port==443:
_PORT_log = "port" + ' ' + str(tornado.options.options.port) + " ...ok"
print(_PORT_log)
else:
print("port's not 443")
temPath=os.path.join(os.path.dirname(__file__),'templates')
_PATH_log = "templates's path" + ' ' + temPath + " ...ok"
print(_PATH_log)
app=tornado.web.Application([(r'/',ForumHandler),
(r'/login',LoginHandler)],
template_path=os.path.join(os.path.dirname(__file__),'templates'))
httpserver=tornado.httpserver.HTTPServer(app)
tornado.options.parse_command_line()
httpserver.bind(tornado.options.options.port)
httpserver.start(1)
#app.listen(ip)
tornado.ioloop.IOLoop.current().start()
dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
logging.info(filename)
if __name__ == '__main__':
main()
其中loginHandler没有用处,不想要就删
postforum.html 保存在C:arktemplates
其中192.168.31.107换成你的ip。
然后下载sqlite3,自己弄,放到同一个文件夹。
运行成功就好了!!!
现在你可以得到用户输入了!!!
如果你想,你也能做一个ca证书哦。这样就是https而不是http了。
多个页面
这是我搜了好久才从一本书里找到的。
比如,大网站都是这样的:
网址:xxx.xxx.xxx/xxx/xxx/xxx
我就很疑惑,/xxx/xxx/xxx是怎么实现的,我搜了好久百度,没搜到!!!
上代码!!!
还是那个hello world程序的加强版
import tornado.web
import tornado.ioloop
import tornado.httpserver
from tornado.options import define
define('port', default=80, type=int)
class WorldHandler(tornado.web.RequestHandler):
def get(self):
self.write(""+
"Hello World!" "+
"Hello,World!")
class CodeHandler(tornado.web.RequestHandler):
def get(self):
self.write(""+
"Hello Code!" "+
"Hello,Code!")
def main():
app = tornado.web.Application([
(r'/',WorldHandler),
(r'/code',CodeHandler),
],)
httpserver=tornado.httpserver.HTTPServer(app)
tornado.options.parse_command_line()
httpserver.bind(tornado.options.options.port)
httpserver.start(1)
tornado.ioloop.IOLoop.current().start()
dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
logging.info(filename)
if name=="__main__":
main()
输入 你的ip/code 看看去,再看看 你的ip。
你会发现,一个是 hello world,一个是 hello code。
如果你觉得有帮助就关注吧球球了!!!(-o-) #作者是男的,别想了......
内网映射
当你觉得现在网站可以用时,跑得远远的测试,发现用不了!!!
原来,这玩意只能在内网用,外网连不上
呃...
那网站不没用了吗?!
别急。
有一个解决办法:内网映射。
如果你没听说过,我给你解释一下下
内网映射,其实就是内网渗透。 就是讲你的防火墙打开,把你的网站发到外网去。 很容易理解吧?! 这里有几个工具: 1.nat123 2.frp 3.natapp 4.lanproxy 5.spike 6.花生壳 7.ssh 8.ngrok
以上是免费的内网穿透。
cson上内网穿透使用文章一抓一大把
总结
今天我们做了一个小网站。
和一些有用的知识,



