tornado远程访问_Tornado实现简单登录注册

1.包的路径问题

之前我们在基础讲过怎样导入模块和包,一般我们有两种方式:

同路径下直接:`import`或者`from packge import module`

如果是不同路径下,需要添加路径:

import sys

sys.path.append('/moudule_path')

除此之外,我们还可以使用相对路径来导入,导入方式就是在包或者模块前面加上一个或者两个点`.`来表示相对路径,其中一个点`.`表示同一个目录,两个`..`表示上一层目录,这个表示方法和Linux的路径表示是一样的。

但是一旦在模块中使用了点来导入其他的模块,那么这个模块就是包中的一个模块,也就是说,这个模块所在的文件加,可以作为一个包来管理。

包中的特殊文件`__init__.py`这是python的中一个比较特殊的文件,包的每一层目录都需要这个文件,这个里面的对象属性和方法,就是这个包的对象属性和方法,如:

import xml

dir(xml) #这其中的__all__属性,就是定义在 __init__.py 中的

同时,想通过点`.`来不断得到包中的包或者模块,这个文件也是必不可少的,如:

from xml.dom import domreg

其次,当模块中如果出现了以点`.`来导入的模块,当你写上`if __name__=='__main__'`的时候,再去执行的时候,会报错,在python2中应该是这样的报错信息:

ValueError: Attempted relative import in non-package

在python3中大概是这样的:

SystemError: Parent module '' not loaded, cannot perform relative import

这就告诉你,这个模块是包中的一个模块,但是你尝试以脚本模式执行,但是这种模式不支持相对导入。如果你需要运行,你就需要去点,换成使用`sys`来添加路径,如:

import sys

sys.path.append('../')

#添加路径之后再导入模块

import yourmodules

最后还有一种选择导入,使用`try ...  except ...`来导入,如:

try:

import moduleA

except:

import moduleB

在项目中由于文件过多,肯定会使用包管理来管理我们的各个模块。所以包管理是必须要知道的要点。

在一般情况下,我们会把常用的放在最顶层的目录,或者顶层的配置文件中导入各个包或者模块。

使用包管理的原因就是方便管理,所以我们的每个包里面是类似的相同的东西,不要随便乱放。

2.MySQL的连接问题

MySQL的远程连接要注意一下几点:

2.1.首先是MySQL允许怎样的登录,是只能本地登录还是允许远程连接,这个在MySQL的配置文件中配置好的,打开`my.cnf`,如果是使用Ubuntu,那么是`/etc/mysql/mysql.conf.d`下的`mysqld.cnf`,找到`bind-address`,如果是`127.0.0.1`则代表只能本地连接,这个本地连接的意思是,先登录上Linux,然后再执行`mysql -u username -p`

这种方式登录,改成`0.0.0.0`就允许任何IP连接了,如果改成指定的IP,那么就只有指定的IP才能登录。

2.2.看用户是否允许远程连接。`root`用户权限太大,肯定只能允许本地连接,所以我们才新建了`admin`用户,还有`develop`用户,赋予不同的权限,同时允许这些用户远程连接。

3.登录和注册

首先是路由等代码如下:

import tornado.httpserver

import tornado.ioloop

import tornado.options

import tornado.webfromtornado.options import define,options

import util.uimodules

import util.uimethodfromdata.user_modules import User,session

define('port',default=8000,help='run port',type=int)classAuthError(Exception):

def __init__(self,msg):

super(AuthError,self).__init__(msg)classIndexHandler(tornado.web.RequestHandler):

defget(self):

username= 'no'self.render('08sqlalchemy.html',username=username)classLoginHandler(tornado.web.RequestHandler): #登录

defget(self):

self.render('08login.html',error=None)

def post(self):

username= User.by_name(self.get_argument('name',''))

passwd= self.get_argument('password','')if username and username[0].password ==passwd:

self.render('08sqlalchemy.html',

username=username[0].username

)else:

self.render('08login.html',error='登陆失败')classRegisterHandler(tornado.web.RequestHandler): #注册

defget(self):

self.render('08register.html',error=None)

def post(self):ifself._check_argument():try:

self._create_user()

self.render('08login.html',error=None)

except AuthErrorase:

self.render('08register.html',error=e)

except Exceptionase:

self.render('08register.html',error=e)else:

self.render('08register.html',error='input error')

def _check_argument(self): #对密码和用户名进行检验

username= self.get_argument('name','')

passwd= self.get_argument('password1','')if len(username)<10 and len(passwd)<10:returnTrueelse:returnFalse

def _create_user(self):if User.by_name(self.get_argument('name','')):

raise AuthError('Name is registered')if self.get_argument('password1','') != self.get_argument('password2',''):

raise AuthError('Password error')

user=User()

user.username= self.get_argument('name','')

user.password= self.get_argument('password1','')

session.add(user)

session.commit()if __name__ == '__main__':

tornado.options.parse_command_line()

app=tornado.web.Application(

handlers=[

(r'/',IndexHandler),

(r'/login',LoginHandler),

(r'/register',RegisterHandler),

],

template_path='templates',

static_path='static',

ui_methods=util.uimethod,

ui_modules=util.uimodules,

debug=True,

)

http_server=tornado.httpserver.HTTPServer(app)

http_server.listen(options.port)

tornado.ioloop.IOLoop.instance().start()

主页页面的HTML

{% extends "./base.html" %}

{% block title %} {{ username }} {% end %}

{% block body %}

{% if username!='no' %}

欢迎用户 {{ username }} 登录

{% else %}

{% include "./06include.html" %}

{% end %}

{% end %}

登录的HTML

Login

{{ error }}

{% end %}

用户名

密码

注册的HTML

Register

Register

{% if error %}

{{ error }}

{% end %}

用户名

密码

再次输入密码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值