
web项目
文章平均质量分 50
通过项目进一步掌握后端知识
zaaaacki
这个作者很懒,什么都没留下…
展开
-
web项目09-----CSRF验证
CSRF验证关于CSRF:https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.htmlcsrf是一种攻击手段如果我们的服务器开启了csrf的验证,他会从cookie中获取csrf_token的值 从请求体中获取csrf_token的值如果这两个值相同,那么验证通过,如果不同,则返回一个状态码,比如400一般都是前端发送请求的时候才会验证,POST、PUT、DELETE的请求方式我们用POST请求的时候,要提交这两个东西原创 2020-11-22 21:44:00 · 185 阅读 · 0 评论 -
web项目054----保存订单评论信息
保存订单评论信息回到我的订单可以发现现在已经是待评价状态了我们点击发表评价我们发现他访问了commnt接口,并且返回了两个东西一个是comment评论,一个是order_id订单id我们在订单模块中编写路由...原创 2021-01-21 20:49:08 · 224 阅读 · 0 评论 -
web项目053-----保存订单结果
保存订单结果我们支付成功以后可以看到一个order/payment的请求我们首先定义路由@api.route("/order/payment", methods=["PUT"])@login_requireddef save_order_payment_result(): """ 保存订单的结果 :return: json """然后查看sdk完善代码首先要接受参数 data = request.form.to_dict()原创 2021-01-21 19:30:42 · 156 阅读 · 0 评论 -
web项目052-----支付宝,支付
支付,支付宝配置公钥和私钥提示:商城私钥加密数据,商城公钥解密数据。 支付宝私钥加密数据,支付宝公钥解密数据。首先百度搜索Openssl,然后安装完之后,通过Openssl生成密钥生成商城公私钥$ openssl$ OpenSSL> genrsa -out app_private_key.pem 2048 # 制作私钥RSA2$ OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem原创 2021-01-12 04:24:36 · 642 阅读 · 0 评论 -
web项目051-----对接支付宝
对接支付宝我们登陆客户账号,进入我的订单,点击去支付我们给支付创建一个单独的模块下面我们要用到支付宝了我们直接百度搜做支付宝进入官网选择我是开发者,然后扫码登陆因为我们没有备案过的url地址,所以我们选择研发服务我们首先要创建应用,去官方文档查看点击接入准备Python支付宝SDK:https://github.com/fzlee/alipay/blob/master/README.zh-hans.md...原创 2021-01-11 18:05:09 · 180 阅读 · 0 评论 -
web项目050-----房东接单&拒单
房东接单&拒单我们现在打开客户订单出现了templateerror所以我们应该去html中做一个替换这里要做一个判断,是否有订单,如果没有就输出‘暂时没有订单’要有结尾我们点击接单他发送了一个put请求我们点击拒单我们在js文件中没有看出什么要返回的特殊数据接下来编写路由接受参数@api.route("/orders/<int:order_id>/status", methods=['PUT'])@login_re.原创 2021-01-11 17:17:08 · 220 阅读 · 0 评论 -
web项目049-----查询用户订单
查询用户订单我们打开用户的我的订单,发现什么都没有,我们应该写这部分的了我们进入房东的账户看一下这个只是假的,写死的,所以还是没有我们观察这两个路由是一样的只有后面不同以为接收了这个数据来区分房东和用户我们先来定义路由接下来我们要进行判断,判断当前访问的是用户还是房东,然后再根据不同的身份编写不同的程序房东的身份: 1.先查询属于自己的房子,就是House的房东id等于当前登陆用户的id 2.把这些房子的id取出来(...原创 2021-01-09 20:53:58 · 564 阅读 · 0 评论 -
web项目048-----保存订单到数据库
保存订单到数据库接下来我们改保存数据到数据库中了这个amount我们还没有,我们需要计算一下然后再把他放进去就行了然后保存提交数据通过观察js文件,我们发现他没返回数据,所以我们就不用返回data了我们点击提交订单打开sqlyog查看,发现都是正确的成功!...原创 2021-01-09 19:55:21 · 342 阅读 · 0 评论 -
web项目047-----保存订单接受参数&校验参数
保存订单接受参数&校验参数接下来我们做订单模块订单会有两个用户 一个下单的 一个接单的我们使用另一个账号登陆,随便点一个房间,然后进入选择日期点击提交订单这是我们要写的订单模块的路由我们要获取这三个参数这里我们创建一个一个orders.py文件,别忘了在蓝图中导入首先我们接收参数:我们的orders_data什么都没有是不行的吗,所以我们要做一个判断然后我们校验参数,判断这三个参数是否都存在然后判断日期是否正确,首先我...原创 2021-01-09 17:53:27 · 165 阅读 · 0 评论 -
web项目046-----房屋页面加入缓存
房屋页面加入缓存我们现在要把搜索的数据放到redis中我们放入redis中的是什么数据类型呢而且我们搜索有很多个条件:house_开始/结束,区域ID,排序,页数,我们怎么选择数据类型把他们都存起来呢我们搜索的条件不一样的话,我们缓存的也是不一样的我们之前大多数的选择都是字符串,整体存入整体失效,有过期时间现在我们有没有别的数据类型可供我们使用呢?redis中都是key和value的形式,那么我们可不可以这样想在redis中有一个数据是这样的格式哈希hash..原创 2021-01-08 20:09:11 · 115 阅读 · 0 评论 -
web项目045-----房屋搜索分页功能
房屋搜索分页功能我们现在要定义分页功能这里我们使用了paginate()这个方法我们设定常量把paginate后面的参数完善处理完分页之后我们打印一下看看page_obj是什么是一个类Pagination我们怎么得到这里面的数据呢我们查看源码这个items就帮咱们做了操作,我们直接使用items就行了现在就给我们返回了具体的数据这中列表中提取数据,我们已经做过很多次了接下来我们就可以返回数据了我们需要去js中文件中看一下data到.原创 2021-01-08 19:34:05 · 271 阅读 · 0 评论 -
web项目044-----房屋搜索页面查询
房屋搜索页面查询现在我们要查询数据库了,但是这么多信息怎么查呢?我们从我们的House模型中查询把房屋查询出来返回到页面中现在假如用户给我们传入了起始时间和结束时间但是我们House模型中没有时间啊,我们怎么查询呢在订单中查询,订单中有起始时间和结束时间但是又出现问题了,有的房间没有下过订单怎么办呢,查不到鸭我们换个思路,我先查新当前用户搜索的时间,比如4号住,我们就找4号当天的订单,然后在把4号被订出去的订单排除就行啦就是:所有的房间-被预定的房间=没被预定的房间原创 2021-01-06 19:30:39 · 154 阅读 · 0 评论 -
web项目043-----房屋搜索参数接受&校验
房屋搜索参数接受&校验我们点击搜索,发现他的url后面是用?拼接的我们把这里换成东城区,来看一下两个url有什么区别他们的aid后面的值发生了变化,说明aid对应的就是城区的数据我们选择入住时间,和离开时间,在来搜索一下看一下url发生了什么变化sd,ed后面有了数据,对应的是入住日期和离开日期我们再点击入住最多发现sk后面有了值通过查看网页的html可以看到每一个都有对应的值p就不用想了,page,第几页到目前我们就.原创 2021-01-06 17:51:32 · 77 阅读 · 0 评论 -
web项目042-----详情页面加入缓存
校验参数,优化代码我们之前没有做任何优化,如果房屋id不存在呢所以我们需要校验参数# 校验参数 if not house_id: return jsonify(errno=RET.PARAMERR, errmsg='参数错误')然后还有验证房屋是否存在 if not house: return jsonify(errno=RET.NODATA, errmsg='房屋不存在')我们还应该做什么呢?特别是首页这种广告位的房屋信息.原创 2021-01-05 20:09:39 · 92 阅读 · 0 评论 -
web项目041-----房屋详情
房屋详情我们从首页点击轮播图查看房屋详情但是我们可以发现这里的东西都写死了,都是固定的,不是咱们想看的所以我们要继续修改打开detail.html文件,我们可以看到这都是写死的我们接下来就要把这些数据查询出来,然后返回到js中,再又模版渲染到html中这里有个数字3这个就是房屋的id我们需要定义路由@api.route("/house/<house_id>", methods=["GET"])这里这个house_id一定是整数形式,所以我们加上限原创 2021-01-05 18:22:00 · 348 阅读 · 1 评论 -
web项目040-----房屋信息加入缓存
房屋信息加入缓存如果我们每次刷新都查询数据库的话是不是比较浪费所以我们要使用缓存# 先查询缓存再查询数据库 try: result = redis_store.get("home_page_data") except Exception as e: logging.error(e) # 这里不用返回错误信息 result = None if result: return result.decode(),原创 2021-01-04 19:29:54 · 85 阅读 · 0 评论 -
web项目039-----查询首页房屋
查询首页房屋接下来我们要在首页做一个房屋的展示但是这么多图片怎么做呢我们首先要查询查询房屋首先我们应该定个规则,如:订单最多的前五位,会在首页展示房屋/或者交广告费等等我们这里按照订单的数量进行排序首先我们进入首页,可以看到,我们需要写的是这个路由因为他是在首页上的,就不需要登陆了@api.route('/houses/index', methods=['GET'])def get_house_index(): """ 获取首页房屋信息原创 2021-01-04 19:08:14 · 142 阅读 · 0 评论 -
web项目038-----查询用户发布过的房屋
查询用户发布过的房屋如果我想知道当前登陆的用户发不过那些房间,这个怎么查呢首先我们可以在网页中看到,我们有一个house的GHT请求所以我们要写/user/houses这个路由首先你需要获取当前用户@api.route("/user/houses", methods=["GET"])@login_requireddef get_user_houses(): """ 获取用户发布的房源 :return: 发布的房源信息 """ # 获取当前原创 2021-01-03 18:46:08 · 135 阅读 · 0 评论 -
web项目037-----保存房屋图片
保存房屋图片我们上一章做完了保存房屋信息我们加下来该保存房屋图片信息了我们先随意上传一张照片,来查看我们需要写的路由然后我们确定我们需要返回的值,和参数,然后校验参数接下来将图片上传到七牛云,同时回顾七牛云的代码filename就是得到的那个图片名字一段乱七八糟的数据,前面加上constants.QINIU_URL_DOMAIN就是图片的url地址我们去models文件中看我们的House表中还有一个房屋主图片的路径所以我们还要添加这个url,在做优化原创 2020-12-16 22:41:42 · 188 阅读 · 1 评论 -
web项目036-----保存房屋基本信息
保存房屋基本信息上一章中,我们的设备信息还没有保存设施与房间是一个多对多的关系,我们怎么保存呢‘我们首先获取设备信息我们的设备有没有可能不存在呢设备对应的编号最多到23,那我们通过postman直接传入24,25怎么办呢所以我们首先要判断设备是否存在查询数据库也可能出错,所以加上try注意这里我们使用了Facility.id.in_()这个查询条件这个in_是什么意思呢,我们可以推断,因为我们获取到的设备信息是这样的是多个数据,所以这个in_应该就是按照Fac原创 2020-12-15 23:06:33 · 119 阅读 · 0 评论 -
web项目035-----保存房屋信息
保存房屋信息现在我们把这些数据随便填写一下然后查看他发送到那个路由发现他访问了houses/info路由,用的POST方式返回了这些数据我们先创建路由然后接受数据校验参数判断价格,我们需要查看model中价格的单位判断区域ID,我们的区域ID就是1-15,如果有人用postman穿个100过来,那是不是不行、然后判断入住天数保存房屋信息现在还没有处理设施信息,所以先不保存...原创 2020-12-12 13:09:42 · 146 阅读 · 0 评论 -
web项目034-----JS模版引擎
JS模版引擎我们可不可以把前端的代码优化呢前端模版JS模板-ART-TEMPLATEhttp://aui.github.io/art-template/我们在这里使用js模版在相应的html文件中也要引入js我们可以去html中寻找这个id我们应该在这个地方使用爆红没事,因为pycharm不认识这个语法...原创 2020-12-11 23:53:50 · 109 阅读 · 0 评论 -
web项目033-----区域信息加入缓存
区域信息加入缓存考虑优化问题,我们每次访问网页,都会查询数据库,就很浪费所以我们要加缓存我们先要从redis中获取area_info这个值如果这个值存在,我们直接使用这个值,并把这个值保存早redis中,设置过期时间在常量中,我们设置一个地区有效过期时间然后设置redis中地区的过期时间这里返回的是json我们还需要将数据转换成json字符串下面就是我们完整的代码@api.route("/areas")def get_area_info():原创 2020-12-10 23:33:27 · 120 阅读 · 0 评论 -
web项目032-----保存城区信息
保存城区信息到目前位置我们的个人信息的部分就算开发完成了我们先想数据库中添加房源地区的信息,和设备的信息INSERT INTO `h_area_info`(`name`) VALUES ('东城区'),('西城区'),('朝阳区'),('海淀区'),('昌平区'),('丰台区'),('房山区'),('通州区'),('顺义区'),('大兴区'),('怀柔区'),('平谷区'),('密云区'),('延庆区'),('石景山区');INSERT INTO `h_facility_info`(`nam原创 2020-12-10 00:05:54 · 106 阅读 · 0 评论 -
web项目031-----保存实名认证信息&获取实名信息
读取用户头像和用户名我们上一章写好了关于用户名的程序但是我们可以发现,还有一个user路由没有定义一个get请求,他需要获取什么呢,我们去js文件中看一看他需要获取两个值,一个是用户名name,一个是头像图片avatar我们写完了路由,但是我们看最后一样。data这么写是不是很麻烦,一个一个获取所以我们在models模型中创建一个方法,to_dict我们在最后的data直接调用to_dict即可,就能获取到字典里面的所有数据我们现在刷新网页头像和.原创 2020-12-04 00:01:37 · 624 阅读 · 0 评论 -
web项目030-----修改用户名
修改用户名上一章我们上传头像,我们去数据库中看一眼图片保存成功接下来我们做用户名的修改我们随意输入发送参数如果这块有用户名的话这显示用户名,然后进行修改加下来我们先写这个路由接下来获取用户提交的用户名,然后保存用户提交的用户名但是不能出现重名的,因为我们数据库中的name一开是就定义的是唯一的接下来我们修改完了用户名,应该更新sesssion中的数据了我们测试一下,我们数据库中有这个name:lala提示我们用户名已经存原创 2020-12-03 00:59:46 · 321 阅读 · 0 评论 -
web项目029-----用户上传头像接口定义
用户上传头像接口定义首先我们可以知道上传图片前端返回的是formdata我们需要接受参数,从前端的js文件中可以看到,我们需要返回avatar_url地址我们运行代码看一下这个返回的是什么他是一个类,我们怎么获取里面的数据呢# 获取图片的二进制数据 image_data = image_file.read()在上传到七牛云@api.route('/users/avatar', methods=["POST"])@login_requiredd...原创 2020-12-01 22:29:59 · 411 阅读 · 0 评论 -
web项目028-----七牛云的SDK封装
七牛云的SDK封装接下来我们看一下七牛云怎么用我们使用他的对象存储功能,点击进入然后点击新建空间选择华东,选择公开,点击创建创建完之后,咱们没有自己的自定义域名,点击好的我知道了创建完之后,点击进入点击文件管理可以看到有个外链域名,点击保存为默认域名点击上传文件点击选择文件,选择完图片之后直接返回就可,就已经保存了这是我们手动上传的过程,我们肯定使用代码操作的,我们怎么用代码操作呢,首先看开发者文档进入开发者中心.原创 2020-12-01 21:46:49 · 270 阅读 · 0 评论 -
web项目027-----装饰器的测试&文件存储方案选择
装饰器的测试我们选择文件点击上传可以看到现在我们去写个这路由,晚上上传图片的功能我们创建一个profile用来写个人中心的一些功能from . import api@api.route('/users/avatar', methods = ["POST"])def set_user_avatar(): """设置用户头像"""我们要设置用户头像,那么就必须登陆所以就用到我们上一章定义的装饰器了# view_func---被装饰的函数def l原创 2020-12-01 20:36:27 · 89 阅读 · 0 评论 -
web项目026-----装饰器的定义
装饰器的定义首先我们思考,我们应该以什么样的一个状态进入到这个界面肯定不能是直接输入my.html我们应该以登陆的状态进入到这个界面,不登录不能进我们需要做一个这个功能,验证用户是否登陆,如果没有登陆就跳转到登陆页面我们需要自己定义一个装饰器在commons.py中定义我们的装饰器,因为他和业务逻辑没有关系,是一个自定义工具,所以我们放到了utils文件中的commons.py文件中我们把user_id保存到全局的g对象中,不存也可以,在session中取也行原创 2020-12-01 01:06:22 · 172 阅读 · 0 评论 -
web项目025-----检查登陆状态&退出登陆
检查登陆状态&退出登陆我们登陆网站可以发现我们缺少一点东西,个人中心什么的从网页源码中可以看到这里有登陆注册,但是我们没有显示,我们应该让他显示出来,让用户知道现在处于什么状态把display关闭我们正常的界面应该是这样的,当然这是没登陆的情况下登陆了之后应该这样,显示用户名我们可以看到有一个session的访问请求是404我们推断一下他是干嘛的,他会判断你是否登陆因为我们之前在session中存入了3个值我们可以使用任意一原创 2020-11-30 23:09:03 · 208 阅读 · 0 评论 -
web项目024-----账户登陆
账户登陆我们在我们的passport中写入用户登陆的代码这里就是我们要接受的信息# 接受参数 request_dict = request.get_json() mobile = request_dict.get('mobile') password = request_dict.get('password')然后校验参数和手机号# 校验参数 看着两个参数存不存在 if not all([mobile,password]):原创 2020-11-30 02:45:03 · 318 阅读 · 0 评论 -
web项目023-----cerlery的目录分层
cerlery的目录分层在tasks文件夹中创建一个sms文件进行目录分层创建一个tasks.py文件,必须叫tasks来,把我们发送短信的任务定义到这个文件中@celery_app.taskdef send_sms(mobile,datas,tid): """发送短信的异步任务""" ccp = CCP() ccp.send_message(mobile,datas,tid)再创建一个main.py文件,相当如celery的入口文件,在tasks.py文件.原创 2020-11-30 00:22:53 · 221 阅读 · 0 评论 -
web项目022-----celery的基本使用
celery的基本使用关于celery:https://www.celerycn.io/因为celery是可以单独运行的,所以我们放在任何位置都行我们创建一个tasks的文件夹再lghome(为了方便观看美观),再在其中创建一个task_sms.py的文件使用celery包含三个方面:1,定义任务函数 2,运行celery服务 3,客户应用程序的调用现在我们就定义完了celery我们如何掉用呢 from lghome.tasks.task_sms import ...原创 2020-11-27 18:52:59 · 167 阅读 · 1 评论 -
web项目021-----celery介绍
通过之间测试可以发现,我们点击获取验证码之后是有一回延迟的我们点击获取验证码的时候,他会先调用容联云平台,然后发送短信,但是这时候如果出现了3s网络延迟,那么我们的过期时间是不是也应该3s后开始计时前端的js这就是只有我们发送完了,返回了0,他才会倒计时60秒。我们不应该这样应该是点击发送,他就倒计时,不应该被网络延迟所耽搁这时候我们就要采用异步发送短信问题:我们的代码是自上而下同步执行的。 发送短信是耗时的操作。如果短信被阻塞住,用户响应将会延迟。 响应延迟会造原创 2020-11-27 16:49:12 · 128 阅读 · 0 评论 -
web项目020-----property装饰器
property装饰器我们之前把密码加密是用的方法这种形式我们有没有更好的方式呢我们可不可以写成属性的方式呢我们需要使用到property装饰器我们把之前的密码加密修改为这样然后再接口文件中直接这样使用即可...原创 2020-11-27 13:12:01 · 93 阅读 · 0 评论 -
web项目019-----用户注册密码加密
用户注册密码加密我们的密码肯定不能时明文保存,所以我们要对其进行加密MD5加密:http://cn.freemd5.com/单独的MD5加密在现在来说并不安全了MD5 +salt(盐)就是md5加上一个随机的字符串,但是也不是特别安全现在我们用sha1或者sha256我们在模型中的User表中定义加密方法passsword_hasg(原始密码),然后通过generate_password_hash(原始密码)进行加密,再赋值给self.password_hash也就是passwo..原创 2020-11-26 18:32:47 · 366 阅读 · 0 评论 -
web项目018-----用户注册接口实现
用户注册接口实现我们在api_1_0文件中创建了passport.py文件,来写我们的用户注册接口首先接收参数from . import apifrom flask import request,jsonifyfrom lghome.response_code import RETimport re@api.route("/users",method =["post"])def register(): """ 注册 :param: 手机号 短信验证码 密原创 2020-11-25 22:18:05 · 366 阅读 · 0 评论 -
web项目017-----Redis中的管道
Redis中的管道Redis的 C - S 架构:基于客户端-服务端模型以及请求/响应协议的TCP服务。 客户端向服务端发送一个查询请求,并监听Socket返回。 通常是以阻塞模式,等待服务端响应。 服务端处理命令,并将结果返回给客户端。存在的问题:如果Redis服务端需要同时处理多个请求,加上网络延迟,那么服务端利用率不高,效率降低。解决的办法:管道pipelinepipeline的介绍管道pipeline可以一次性发送多条命令并在执行完后一次性将结果返回。 pi原创 2020-11-25 21:30:08 · 141 阅读 · 1 评论 -
web项目016-----避免频繁发送短信验证码
避免频繁发送短信验证码接着上一章,我们现在可以正常的发送短信验证码了,但是我们现在是不是可以一直发送啊,这就很不合理虽然前端做了60秒的倒计时功能,但是我们使用postman等软件还是可以绕过前端这个60秒倒计时去发送短信的所以我们应该做一个验证,同一个手机号60秒只能发送一条我们需要在redis中存入一个send_flag的值来进行校验我们在用户填写的图片验证码之后进行判断# 判断手机号的操作 try: send_flag = redis_store.原创 2020-11-25 21:18:23 · 590 阅读 · 0 评论