前言
Flask是一个使用Python编写的轻量级 Web 应用框架,对于像我这种想偷懒,不想自己从头学后端的人来说是再合适不过了,为了使用Flask,我在十一月份就已经开始了学习Flask必备的Python知识。
明确目标
首先要明确目标,我要做的是在客户端输入用户名密码,然后选择登录还是注册,在服务器端进行检验,并存储数据到服务器端的数据库(为了简便使用SQLite),并且返回Response消息回客户端,客户端再根据返回的Response消息进行相应的动作。由于在大一的时候用C语言做过一个京东购物管理系统,里面涉及了在本地登录,所以我对登录页面的逻辑还算是轻车熟路了。
首先写Android端逻辑
首先需要在APP端构造一个简单的登录界面,只需要两个EditText和两个按钮就行了。如图所示
然后写代码从两个输入框中将用户输入的用户名和密码提取出来。
1 |
|
有一点重要的是要判断不为空,由于这个应用不牵涉到大规模使用,所以不对密码安全性进行限制。
接下来先写注册模块,注册模块由registeNameWordToServer()函数来实现,这个模块功能就是将用户名密码发送到url对应的服务器地址。在网络方面为了简便,使用了一个OKHttp的开源网络框架。
1 | private void registeNameWordToServer(String url,final String userName,String passWord) |
只需要调用Request的post方法就能够进行post动作。在Call里收到服务器的返回消息,重写CallBack接口,写出成功响应和失败响应的逻辑。在接口中由于OkHttp已经封装了子线程操作,所以这是在子线程中的动作,如果需要弹出对话框需要返回UI线程。
接下来的登录模块跟注册模块大同小异。
服务器端逻辑
服务器端要用到Flask,所以当然首先创建一个Flask项目,由于我用的IDE是JetBrain的PyCharm,创建Flask项目非常方便。本来我以为服务器端会很难,还专门买了一本Flask的书,结果还没看几页的知识就完全够用了。先上代码:
1 | from flask import Flask |
@app.route(‘/‘)为装饰器,起作用就是在客户端访问“服务器地址/”是可以调用相应的函数。比如@app.route(‘/register’,methods=[‘POST’])就是当访问 “服务器地址/register”时调用的。
Python使用SQLAlchemy操作数据库很方便,几句代码就创建完毕了,一看就懂,当创建表时就要注意了,需要自己写一个类来实现这个表里所需的列。这个类需要继承自你的数据库.Model,userdb.Column(userdb.String,unique=True)就相当于创建了一个String类型的不可重复的列,用来储存用户名在合适不过了。
接下来就要在函数里处理登录注册的逻辑,注册逻辑是这样的:取出Request中的username,将其作为关键字放进数据库中搜索,若没有,则将其用户名和密码都储存下来,若已经存在了,则返回一个错误信号通知客户端已经存在了。
登陆逻辑就更简单了,只需要取出Request中的username,若数据库中不存在,就通知用户请先注册,若存在但密码不正确,则通知用户密码错误,若密码正确,则返回正常信息。
总结
通过这次Flask的后端实践,我深刻明白了一个道理,往往你认为难的东西,你真正去做了,往往会发现并没有这么难。以前我总是把搭建服务器和Android网络编程想的很难,其实真正去做了,并不是很难。而那些你认为很简单那的东西,如果不考虑周到,往往会出岔子。