用python 开发一个登录的http接口:

用户登录数据存在缓存redis里,登录时根据session判断用户是否已登录,session有效,则直接返回用户已登录,否则进mysql查询用户名及密码,用户信息匹配则返回登录成功并同时把seesion写进redis,session有效时间为40分钟。

具体实现如下:

项目结构:

start.py为启动文件:

import os,sys
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,BASE_PATH)
from lib.interface import server
from conf.setting import SERVER_PORT server.run(host='0.0.0.0',port=SERVER_PORT,debug=True)

conf未配置文件,存放常量,setting.py内容:

MYSQL_HOST = '你的ip'
MYSQL_PORT = 3306
SQL_DB = 'api' MYRDS_HOST = '你的ip'
MYRDS_PORT = ''
RDS_DB = 2 SERVER_PORT = 8888 #
SALT = 'dsadsadsada' #

data为常用数据文件 如  msg.py内容:

NOT_NULL = {
"msg":"必填参数不能为空",
"code":400
}

lib为函数功能文件:

tool.py主要存放工具类函数或方法:

from conf.setting import MYSQL_HOST,MYSQL_PORT,SQL_DB,SALT,MYRDS_HOST,MYRDS_PORT,RDS_DB

def md5_passwd(str):
str=str+SALT
import hashlib
md = hashlib.md5()
md.update(str.encode())
res = md.hexdigest()
return res.upper() def conn_mysql(sql):
import pymysql
conn = pymysql.connect(host=MYSQL_HOST,user ='root',password ='',db=SQL_DB,charset='utf8',port=MYSQL_PORT)
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute(sql)
res = cur.fetchone()
conn.commit()
cur.close()
conn.close()
return res def my_json(dic):
import json
return json.dumps(dic,ensure_ascii=False)

interface.py为http接口服务:

import flask
from lib.tools import conn_mysql,md5_passwd,my_json
from conf.setting import MYRDS_HOST,MYRDS_PORT,RDS_DB
from flask import request
from data.msg import NOT_NULL
server = flask.Flask(__name__)
import redis @server.route('/login',methods =['post'])
def login():
username = request.json.get("username")
password = request.json.get("password")
password = md5_passwd(password)
if username and password:
r1 = redis.Redis(host= MYRDS_HOST, port= MYRDS_PORT, password='', db=RDS_DB)
keys = r1.keys()
if username.encode() in keys:
return '{"msg": "你已经登录", "code": 800}'
else:
sql = 'select id,username,password from user where username ="%s";' % username
res = conn_mysql(sql)
if not res:
return '{code":200,"msg":"用户名不存在}'
elif res['password'] == password:
r1.setex(username,1,1000)
return '{"code":200,"msg":"登录成功"}'
else:
return '{"code":400,"msg":"密码输入错误"}'
else:
return my_json(NOT_NULL)

一个简单的用python 实现系统登录的http接口服务实例的更多相关文章

  1. 使用Servlet和JSP实现一个简单的Web聊天室系统

    1 问题描述                                                利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...

  2. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  3. 一个简单的多线程Python爬虫(一)

    一个简单的多线程Python爬虫 最近想要抓取拉勾网的数据,最开始是使用Scrapy的,但是遇到了下面两个问题: 前端页面是用JS模板引擎生成的 接口主要是用POST提交参数的 目前不会处理使用JS模 ...

  4. Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务、WCF消息头添加安全验证Token

    原文:Prism for WPF 搭建一个简单的模块化开发框架(四)异步调用WCF服务.WCF消息头添加安全验证Token 为什么选择wcf?   因为好像wcf和wpf就是哥俩,,, 为什么选择异步 ...

  5. java课堂测试—根据模板完成一个简单的技术需求征集系统

    课堂上老师发布了一个页面模板要求让我们实现一个系统的功能,模仿以后后端的简单工作情况. 然后在这个模板的基础上,提供了一个注册的网页模板,接着点击注册的按钮,发现register里面调用了zhu/zh ...

  6. 利用JS跨域做一个简单的页面访问统计系统

    其实在大部分互联网web产品中,我们通常会用百度统计或者谷歌统计分析系统,通过在程序中引入特定的JS脚本,然后便可以在这些统计系统中看到自己网站页面具体的访问情况.但是有些时候,由于一些特殊情况,我们 ...

  7. 一个简单的NetCore项目:2 - 登录

    1-UI,登陆界面布局 PS:使用的是metronic 框架,没有用过的可以自行百度. 1.1 metronic 放在wwwroot文件夹下面 1.2  metronic 中的 open sans 使 ...

  8. 一个简单的定向python爬虫爬取指定页面的jpg图片

    import requests as r import re resul=r.get("http://www.imooc.com/course/list") urlinfo=re. ...

  9. 一个简单有趣的Python音乐播放器

    (赠新手,老鸟绕行0.0) Python版本:3.5.2 源码如下: __Author__ = "Lance#" # -*- coding = utf-8 -*- #导入相应模块 ...

随机推荐

  1. [Robot Framework] Robot Framework用Execute Javascript对XPath表示的元素执行Click操作

    Execute Javascript document.evaluate("//a[contains(@href,'createBook')]", document, null, ...

  2. Netty 源码 NioEventLoop(三)执行流程

    Netty 源码 NioEventLoop(三)执行流程 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 上文提到在启动 N ...

  3. match

    //清空数据match (n) detach delete n (一)查询节点1.查询所有节点 //查询数据库中的所有节点 match(n)return n 2.查询带有某个标签的所有节点 //查询数 ...

  4. SpringMVC 学习 十 SSM环境搭建(三)springMVC文件配置

    SpringMVC文件配置的详细过程,可以查看springMVC环境搭建的注解配置篇<springMVC学习三 注解开发环境搭建> <?xml version="1.0&q ...

  5. 在myeclipse上发布自己的webservice

       什么是WebServices? 它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web应用程序分支,是自包含.自描述.模块化的应用,可以发布.定位.通过w ...

  6. Ajax的爬取心得

    一.查找到js的网址 在我们做爬虫的时候,如何判断一个数据是Ajax(asynchronous JavaScript And Xml,异步的JavaScript和Xml), 首先是数据的加载,在请求网 ...

  7. PHP的设计模式之工厂模式

    以前写代码老觉得,搞那么多乱七八槽的设计模式干嘛啊,这不是自己找罪受嘛.现在在这次的API开发过程中才晓得设计模式的厉害,真的是境界不到,永远不能领悟呀.还好坚持编码这么久,终于进入设计模式的运用了, ...

  8. 2019.01.08 bzoj4543: [POI2014]Hotel加强版(长链剖分+dp)

    传送门 代码: 长链剖分好题. 题意:给你一棵树,问树上选三个互不相同的节点,使得这个三个点两两之间距离相等的方案数. 思路: 先考虑dpdpdp. fi,jf_{i,j}fi,j​表示iii子树中离 ...

  9. Codeforces Round #541 (Div. 2) D 并查集 + 拓扑排序

    https://codeforces.com/contest/1131/problem/D 题意 给你一个n*m二维偏序表,代表x[i]和y[j]的大小关系,根据表构造大小分别为n,m的x[],y[] ...

  10. mysql学习之路_字段类型与属性

    回顾 数据库基本知识:关系型数据库与非关系型数据库 关系型数据库:安全(磁盘) 非关系型数据库:高效(内存) 关系型数据库:建立在关系模型上的数据库, 数据结构:二维表(浪费空间) 数据库操作指令:s ...