Linux pycharm tornado MySQL JavaScript jQuery ajax后端开发

本文介绍了一个基于Tornado框架的后端开发实战教程,包括环境配置、代码实现及与MySQL数据库交互等内容。

环境: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>用户名 &nbsp; : </span>
        <input type='text' name='name' id="username">
        <span id="registerinfo"></span>
        <br>
        <span>密码 &nbsp;&nbsp; &nbsp;: </span>
        <input type="password" name='password'>
        <br>
        <span>确认密码 : </span>
        <input type="password" name='cpassword'>
        <br>
        <span>头像 &nbsp; &nbsp;</span>
        <input type="file" name="img">
        <br>
        <span>年龄 &nbsp;&nbsp; &nbsp;: </span>
        <input type="text" name='age'>
        <br>
        <span>妻子 &nbsp;&nbsp; &nbsp;: </span>
        <input type="text" name='wife'>
        <br>
        <span>居住地 &nbsp;</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,即可打开编辑,具体可百度有很多,或私信评论都可,我会尽快回复,写到这里吧,有时间我在精细这篇博文.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值