环境:Ubuntu tornado
工具:pycharm
简单小教程,关于tornado后端开发的,如有问题请指正,我再修改
先上图:

左上角file下,有一个New Project,创建即可
在New Project上右击,点击discovery,创建文件夹
如:先创建mytornado,之后创建exerciser
右击exercise,新建Python文件
修改插入,这是一个基本框架
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.web import Application, RequestHandler
#创建类并继承自Requesthandler
class RegisterHandler(RequestHandler):
def get(self, *args, **kwargs):
self.render('register.html')
def post(self, *args, **kwargs):
pass
app = Application([('/',LoginHandler), #application内,中括号内是元组存放url,后面存放的是模板和静态文件
],
template_path = 'templates',
static_path = 'statics')
server = HTTPServer(app)#创建服务器(实例)
server.listen(8003)# 监听端口
IOLoop.current().start()这个是我实际的代码,上面的是为了简单明了说明框架用的,import pymysql
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.web import Application, RequestHandler
from random import randint
class RegisterHandler(RequestHandler):
def get(self, *args, **kwargs):
self.render('register.html')
def post(self, *args, **kwargs):
pass
class LoginHandler(RequestHandler):
def get(self,msg=None, *args,**kwargs):
print('nihaoa')
msg = self.get_query_arguments('msg',None)
mq = ''
if msg:
mq = '您的账号或密码有误,请重新输入'
self.render('login.html', m = mq) #将mq传入到login.html中
def post(self, *args, **kwargs):
print('nihaodsf')
name = self.get_body_argument('name')
password = self.get_body_argument('password')
cpassword = self.get_body_argument('cpassword')
age = self.get_body_argument('age')
wife = self.get_body_argument('wife')
addr = self.get_body_argument('addr')
if password != cpassword:
return self.render('register.html')
#连接数据库
settings = {'host': '127.0.0.1',
'port': 3306,
'user': 'root',
'password': '123456',
'database': 'superstar',
'charset': 'utf8'}
connection = pymysql.connect(**settings)
cursor = connection.cursor()
sqla = 'select name from user'
cursor.execute(sqla)
result = cursor.fetchall()
print(result)
if name and age and password and wife:
for user in result:
print(user[0])
if user[0] == name:
return self.render('register.html')
file = self.request.files
a = file.get('img')[0]
img = a.get('filename')
if file:
avatars = file.get('img')
for avatar in avatars:
body = avatar.get('body')
with open('statics/images/{}'.format(avatar.get('filename')), 'wb') as avatarfile:
avatarfile.write(body)
sql = 'insert into user(name,password,age,wife,addr,img) VALUES ("{}","{}","{}","{}","{}","{}")'.format(name, password, age, wife, addr, img)
print(sql)
print(name, password, age, wife, addr)
# sql = 'insert into user(name,password,age,wife,addr) VALUES(%s,%s,%s,%s,%s)'
# blank = (name,password,age,wife,addr)
cursor.execute(sql)
cursor.connection.commit()
else:
self.render('register.html')
self.redirect('/')
class Dbutil():
def __init__(self,*args,**kwargs):
pass
def classa(self,**kwargs):
kwargs = {'host': '127.0.0.1',
'port': 3306,
'user': 'root',
'password': '123456',
'database': 'superstar',
'charset': 'utf8'}
connection = pymysql.connect(**kwargs)
cursor = connection.cursor()
class Check(RequestHandler):
def get(self, *args, **kwargs):
pass
def post(self, *args, **kwargs):
username = self.get_body_argument('name')
settings = {'host': '127.0.0.1',
'port': 3306,
'user': 'root',
'password': '123456',
'database': 'superstar',
'charset': 'utf8'}
connection = pymysql.connect(**settings)
cursor = connection.cursor()
sqla = 'select name from user'
cursor.execute(sqla)
result = cursor.fetchall()
for user in result:
print(user[0])
if user[0] == username:
resp = {'msg': 'fail'}
self.write(resp)
class IndexHandler(RequestHandler):
def get(self, *args, **kwargs):
self.render('blog.html')
def post(self, *args, **kwargs):
username = self.get_body_argument('username')
password = self.get_body_argument('password')
if username == 'tarena' and password == 'cuihailong':
self.redirect('/blog')
else:
msg = '您的账号或密码有误,请重新输入'
self.redirect('/?msg='+msg)
class BlogHandler(RequestHandler):
def randoma(self,a,b):
return randint(a,b)
def get(self, *args, **kwargs):
self.render('blog.html',rand=self.randoma,blogs=[
{'name':'刘德华','age':57,'wife':'朱丽倩','job':'歌手,演员','hobit':'篮球,足球,橄榄球','img':'ldh.jpeg'},
{'name': '张学友', 'age': 57, 'wife': '罗美薇', 'job': '歌手', 'hobit': '高尔夫,足球,乒乓球', 'img': 'zxy.jpeg'},
{'name': '郭富城', 'age': 53, 'wife': '方媛', 'job': '舞者,歌手,演员', 'hobit': '篮球,冰球,橄榄球', 'img': 'gfc.jpeg'},
{'name': '黎明', 'age': 52, 'wife': '乐基儿', 'job': '歌手,演员', 'hobit': '高尔夫,足球', 'img': 'lm.jpeg'},
])
#此处是URL
app = Application([('/',LoginHandler),
('/index',IndexHandler),
('/register',RegisterHandler),
('/blog', BlogHandler),
('/check', Check)],
template_path = 'templates',
static_path = 'statics')
server = HTTPServer(app)
server.listen(8003)
IOLoop.current().start()
我就不一一讲解了,你可以先练习一个类,后端框架主要部分,URL,views,还有HTML文件(模板),抓住核心就容易了.
代码内包含与MySQL链接的代码,随后有时间在详细补充吧!
写完代码后,右击执行run(右上角有个绿三角)
在浏览器器中输入http://localhost:8003/ 进入如下网页:

我的文件内加入了判别,初期我也没加,现在也只是随意加入,只是在注册加入了ajax判别,
由于在注册中使用了图片,所以静态文件中加入了image文件夹
新建templates文件夹,用于存放模板文件如第一张图所示
在templates文件夹中新建register.html文件如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
<script src="static/js/jquery-3.2.1.js"></script>#导入jQuery
<script>
$(function(){
var username=$('#username');
var registerinfo=$('#registerinfo');
username.blur(function () {
$.ajax({ #ajax验证,
url: '/check',
data: {'name': username.val()},
type:'post',
datatype:'json',
async:true,
success:function (data) {
if (data['msg']=='fail'){
registerinfo.text('已被使用');
}else{
registerinfo.text('ok');
}
},
error:function (err) {
console.log("发生错误:" + err);
}
});
});
});
</script>
</head>
<body>
<form method='post' action="/" enctype="multipart/form-data">
<span>用户名 : </span>
<input type='text' name='name' id="username">
<span id="registerinfo"></span>
<br>
<span>密码 : </span>
<input type="password" name='password'>
<br>
<span>确认密码 : </span>
<input type="password" name='cpassword'>
<br>
<span>头像 :</span>
<input type="file" name="img">
<br>
<span>年龄 : </span>
<input type="text" name='age'>
<br>
<span>妻子 : </span>
<input type="text" name='wife'>
<br>
<span>居住地 : </span>
<select name="addr">
<option>上海</option>
<option>北京</option>
<option>广州</option>
</select>
<br>
<input type='submit' value='注册'>
<input type='reset' value='重置'>
</form>
</body>
</html>
这其中有jQuery,ajax等,如有不懂请百度,或是私信我也行
确保你的pycharm中有database
安装教程:在file下有个setting进入下图

搜索database,若是没有上述文件,如下图

点击Search in repositories则会搜索出来点击install即可
当然,tornado和django不一样的,必须自己先创建库以及table,我是直接在MySQL中建好库和表的,也可以在pycharm中建表
装好database后,在view下的Tool Windows下的DB browser点击出现一个窗口
选择MySQL,输入你的账户密码即可,
双击你已经建好的table,即可打开编辑,具体可百度有很多,或私信评论都可,我会尽快回复,写到这里吧,有时间我在精细这篇博文.
本文介绍了一个基于Tornado框架的后端开发实战教程,包括环境配置、代码实现及与MySQL数据库交互等内容。
1586

被折叠的 条评论
为什么被折叠?



