网站的目录怎样做的网站建设 技术方案

diannao/2026/1/22 8:05:51/文章来源:
网站的目录怎样做的,网站建设 技术方案,查建设工程规划许可证在哪个网站,wordpress 加载速度在此之前#xff0c;向大家说明的是#xff0c;我们整个框架用的是flask sqlalchemy redis。如果没有开发过web#xff0c;还是先去学习一下#xff0c;这边只是介绍如果从开发web转换到开发移动端。如果flask还不是很熟悉#xff0c;我建议先到这个网站简单学习一下向大家说明的是我们整个框架用的是flask sqlalchemy redis。如果没有开发过web还是先去学习一下这边只是介绍如果从开发web转换到开发移动端。如果flask还不是很熟悉我建议先到这个网站简单学习一下非常非常简单。http://dormousehole.readthedocs.org/en/latest/    一直想写一些特别的东西能让大家学习讨论的东西。但目前网上的很多博客老么就按照官方文档照本宣读要么直接搬代码什么都不说明。我写这个系列的博客让大家由浅入深一步一步走向复杂结构以及为啥要这么走其他方式可不可以等等。   目前看来移动开发最火而我们python最适合开发移动的就是flask web框架这款web框架非常清晰可以简单用可以复杂用。最简单的时候一个py文件就可以做一个项目复杂的时候利用蓝图做各种版本控制代码结构自己完全控制非常自由。   首先我们要知道目前我们移动开发基本都在用restful api什么是restful api呢百度百科一下Web 应用程序最重要的 REST 原则是客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启客户端不会得到通知。此外无状态请求可以由任何可用服务器回答这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。   说白了我们不能使用cookie不能使用session了。如果稍微有点http经验的人都知道很多时候我们都把一些基本内容放在cookie里面服务器每次读取或者写入的时候服务器端就直接设置session就可以了这样每次客户端直接携带自己的cookie值上来我们就知道它是谁怎么把数据给它。但restful api的风格不允许这样那服务器应该采取何种方案呢   目前网上大多数做法是token方式第一次登录的时候先提交用户名密码服务器收集到以后先验证一下如果验证通过了这时候服务器端基于用户名、密码、当前时间戳等内容用md5或者des或者aes等加密方式生成一个token值然后把token值存放到redis里面记录它对应哪个用户然后把这个token值发给客户端。客户端收到token值以后下次访问服务器端任何接口的时候直接携带这个token服务器端就知道它是谁了该给它什么数据。哪以何种方式给服务器端呢通常的做法就是把token值放在header里面。当然这个不是绝对你也可以放在body里面这个都是仁者见仁智者见智的事。好了我们就先放在header头里面。   以上说了这么多大家也烦了直接上代码再解释吧。   首先创建整个工程为了最简单方便我们直接就保留以下的py文件。       看model.py里面的代码    # coding:utf-8 from sqlalchemy import create_engine, ForeignKey, Column, Integer, String, Text, DateTime,\and_, or_, SmallInteger, Float, DECIMAL, desc, asc, Table, join, event from sqlalchemy.orm import relationship, backref, sessionmaker, scoped_session, aliased, mapper from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.hybrid import hybrid_property, hybrid_method from sqlalchemy.orm.collections import attribute_mapped_collection import datetimeengine create_engine(mysql://root:a12345678127.0.0.1:3306/blog01?charsetutf8, pool_recycle7200)Base declarative_base()db_session scoped_session(sessionmaker(autocommitFalse,autoflushFalse,bindengine))Base.query db_session.query_property()class User(Base):__tablename__ userid Column(id, Integer, primary_keyTrue)phone_number Column(phone_number, String(11), indexTrue)password Column(password, String(30))nickname Column(nickname, String(30), indexTrue, nullableTrue)register_time Column(register_time, DateTime, indexTrue, defaultdatetime.datetime.now)if __name__ __main__:Base.metadata.create_all(engine) 运行一下就创建user表了。 user表中有电话号码phone_number密码password昵称nicknameregister_time注册时间   下面是view.py代码 1 # coding:utf-82 from flask import Flask, request, jsonify3 from model import User, db_session4 import hashlib5 import time6 import redis7 8 app Flask(__name__)9 redis_store redis.Redis(hostlocalhost, port6380, db4, passworddahai123) 10 11 12 app.route(/) 13 def hello_world(): 14 return Hello World! 15 16 17 app.route(/login, methods[POST]) 18 def login(): 19 phone_number request.get_json().get(phone_number) 20 password request.get_json().get(password) 21 user User.query.filter_by(phone_numberphone_number).first() 22 if not user: 23 return jsonify({code: 0, message: 没有此用户}) 24 25 if user.password ! password: 26 return jsonify({code: 0, message: 密码错误}) 27 28 m hashlib.md5() 29 m.update(phone_number) 30 m.update(password) 31 m.update(str(int(time.time()))) 32 token m.hexdigest() 33 34 redis_store.hmset(user:%s % user.phone_number, {token: token, nickname: user.nickname, app_online: 1}) 35 redis_store.set(token:%s % token, user.phone_number) 36 redis_store.expire(token:%s % token, 3600*24*30) 37 38 return jsonify({code: 1, message: 成功登录, nickname: user.nickname, token: token}) 39 40 41 app.route(/user) 42 def user(): 43 token request.headers.get(token) 44 if not token: 45 return jsonify({code: 0, message: 需要验证}) 46 phone_number redis_store.get(token:%s % token) 47 if not phone_number or token ! redis_store.hget(user:%s % phone_number, token): 48 return jsonify({code: 2, message: 验证信息错误}) 49 50 nickname redis_store.hget(user:%s % phone_number, nickname) 51 return jsonify({code: 1, nickname: nickname, phone_number: phone_number}) 52 53 54 app.route(/logout) 55 def logout(): 56 token request.headers.get(token) 57 if not token: 58 return jsonify({code: 0, message: 需要验证}) 59 phone_number redis_store.get(token:%s % token) 60 if not phone_number or token ! redis_store.hget(user:%s % phone_number, token): 61 return jsonify({code: 2, message: 验证信息错误}) 62 63 redis_store.delete(token:%s % token) 64 redis_store.hmset(user:%s % phone_number, {app_online: 0}) 65 return jsonify({code: 1, message: 成功注销}) 66 67 68 app.teardown_request 69 def handle_teardown_request(exception): 70 db_session.remove() 71 72 if __name__ __main__: 73 app.run(debugTrue, host0.0.0.0, port5001)   下面来逐个解释一下 首先几个import不用解释了注意把User和db_session 都import过来然后定义一个redis的connection。 再接下来就login接口直接post方法获取json格式数据里面有phone_number和password接下来数据库查询如果没有这个用户返回一个json格式再接下来对比password如果phone_number和password都正确就用md5函数生成一个token这个token包含由phone_number、password、当前时间戳str(int(time.time()))生成再返回。 看我每个返回的东西首先都是json格式这个是目前大多数移动开发默认返回的格式其次每个返回必定有个code目前这边有2个值是0和1其实可以看出来0代表失败1代表成功有0的地方必定要有message。每个返回一个code是必须的但是值可以自己定义。很多开发把http的code直接拿来用也可以比如成功返回就200没有就404禁止就403。这些都可以只要服务器端开发和客户端开发开始就约定一个值就好具体的值只要能快速开发都可以。 好了返回格式先解释到这我们以后会继续扩展。再看接下来的redis。 第一行先用 user:13765505223 这种类型的作为每个用户的key值是一些基本的东西其中app_online代表上线了这个app_online其实很重要的因为移动端开发跟web不同要记录移动端在登录状态还是登出状态。如果在登录状态我们就可以从服务器推送了关于推送我们以后会逐步讲这个先放在这边。 第二行用token:token 作为keykey里面的值是具体的用户电话号码 第三行把这个token设置一个过期时间超过这个时间就删除这个有需要的app可以设置一下。如果你的app的token想永远不变这行代码可以注释掉。 好了目前login函数基本完成。 接下来看验证函数user和注销函数logout user这个函数这是来验证登录以后有没有数据没多少意义。 逐行分析首先在header里找到这个token如果没有token就返回失败其次验证redis如果token所在的key value对里面没有值或者值错误则返回失败。然后返回具体的数据。非常简单的一个函数。 下面的logout函数也差不多也是这样也是验证然后删除token的key value对再设置app_online为0表示当前是注销状态。 最后一个很重要这边一定要记住把这个函数写上。如果没有这个函数每一个会话以后db_session都不会清除很多时候数据库改变了前台找不到或者明明已经提交数据库还是没有更改或者长时间没有访问接口mysql gong away这样的错误。总之一定要加上。 好了整个过程已经完成下面进入验证状态。首先我们在外面新建一个用户存到数据库然后写个小脚本验证一下。 from model import User, db_sessionnew_user User(phone_number12345678901, password123456, nicknameu测试用户1)db_session.add(new_user)db_session.commit() 一个用户已经创建好接下来就是测试这边测试有2种方式一个用IDE自带的测试软件测试pycharm有很好的测试软件其次用小脚本方式测试既然我们以后要不停的写例子就用小脚本测试吧过程也非常简单。 1 # coding:utf-82 import requests3 import json4 5 6 class APITest(object):7 def __init__(self, base_url):8 self.base_url base_url9 self.headers {} 10 self.token None 11 12 def login(self, phone_number, password, path/login): 13 payload {phone_number: phone_number, password: password} 14 self.headers {content-type: application/json} 15 response requests.post(urlself.base_url path, datajson.dumps(payload), headersself.headers) 16 response_data json.loads(response.content) 17 self.token response_data.get(token) 18 return response_data 19 20 def user(self, path/user): 21 self.headers {token: self.token} 22 response requests.get(urlself.base_url path, headersself.headers) 23 response_data json.loads(response.content) 24 return response_data 25 26 def logout(self, path/logout): 27 self.headers {token: self.token} 28 response requests.get(urlself.base_url path, headersself.headers) 29 response_data json.loads(response.content) 30 return response_data   写一个很简单的小脚本就可以拉到命令行测试了我们试试吧。 from client import APITestapi APITest(http://127.0.0.1:5001)data api.login(12345678901, 1234567)print data.get(message) 密码错误data api.login(12345678901, 123456)print data.get(message) 成功登录data api.user()print data {uphone_number: u12345678901, ucode: 1, unickname: u\u6d4b\u8bd5\u7528\u62371}print nickname Traceback (most recent call last):File input, line 1, in module NameError: name nickname is not definedprint data.get(nickname) 测试用户1data api.logout()print data {umessage: u\u6210\u529f\u6ce8\u9500, ucode: 1}print message Traceback (most recent call last):File input, line 1, in module NameError: name message is not definedprint data.get(message) 成功注销  登录成功的时候我们进redis看看redis数据格式比较直观点。 127.0.0.1:6380[4] keys * 1) token:bbf73ab651a13a5bc5601cf01add2564 2) user:12345678901 127.0.0.1:6380[4] hgetall user:12345678901 1) token 2) bbf73ab651a13a5bc5601cf01add2564 3) nickname 4) \xe6\xb5\x8b\xe8\xaf\x95\xe7\x94\xa8\xe6\x88\xb71 5) app_online 6) 1 127.0.0.1:6380[4] get token:bbf73ab651a13a5bc5601cf01add2564 12345678901 127.0.0.1:6380[4]   嗯一切都正常但我们开发不能一切正常就满足。就这些代码我们有很多需要改进的地方尤其是验证token的那边是不是可以改进呢redis设置的时候一连串动作如果这时候出错或者redis只设置到一半怎么办这些问题我们下一章继续解决。转载于:https://www.cnblogs.com/yueerwanwan0204/p/5327912.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精准网站seo诊断报告免费网站空间哪个好

如果你想先看看最终效果再决定看不看文章 -> bilibili示例代码下载 第二篇:一步一步教你实现iOS音频频谱动画(二) 基于篇幅考虑,本次教程分为两篇文章,本篇文章主要讲述音频播放和频谱数据的获取,下篇将…

建设主题网站的顺序是什么意思上海免费网站建设模板推荐

1.every()方法的定义与用法 every()方法用于检测数组中的所有元素是否都满足指定条件every()方法会遍历数组中的每一项,如果有一项不满足条件,则表达式返回false,剩余的项将不会进行检测;如果遍历完数组后,每一项都符…

个人网站开发西安seo王

目录 1、Value注解的作用 2、Value 注解的写法 3、用法示例 3.1 resources 目录新增 book.properties 配置文件 3.2 新增实体 Book.java 3.3 新增 TestValueConfig.java 3.4 新增 TestValue.java 测试文件 4、使用场景 今天给大家分享Spring属性赋值注解Value 用法&#xff0c…

建网站无锡网站建设主流开发语言

Java中的WeakHashMap是中高级Java开发人员中非常流行的数据结构。 WeakHashMap类位于java.util包中。 这是一个Map实现,其中存储了对其键的弱引用。 当关联密钥丢失其所有活动的强引用和软引用时, WeakHashMap中的条目将自动删除。 在本文中&#xff0…

换网站了吗网站平台维护

ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,使用if、else和else if渲染对应状态下的UI内容。 说明: 从API version 9开始,该接口支持在ArkTS卡片中使用。 使用规则 支持if、else和else if语句。 if、else if后跟随的条件语句…

html5个人网站源码有专门做市场分析的网站么

程序员的圈子啊那是十分神秘,又令人着迷的。每天的工作就是对着电脑,那他们的工作是如何的呢?我们来品一品(PS:后面奉上各位大佬的桌面,别走开哦)↓↓↓最最常见的普通版:升级版&…

wordpress 不允许评论网站seo文章该怎么写

CSRF攻击是开发Web后端时需要重点解决的问题。 那么什么是CSRF攻击呢? CSRF跨站点请求伪造(Cross—Site Request Forgery),其主要利用的是Cookie的一个弱点,就是Cookie 最初被设计成了允许在第三方网站发起的请求中携带: 关于Co…

成都低价做网站合肥公司网站建设

iOS 9音频应用播放音频之音量设置与声道设置 iOS 9音频应用音量设置 音量又称响度、音强,是指人耳对所听到的声音大小强弱的主观感受,其客观评价尺度是声音的振幅大小。在iOS 9音频应用的应用中,经常会出现播放的音乐音量过大或者过小。此时i…

网站发布服务托管器wordpress后台登陆logo

每个人都习惯使用Python去完成机器学习和深度学习的工作,但是对于习惯于某种特定语言的人来说,转型不是那么容易的事。这两年我花了不少时间在Python,毕竟工作的重心也从移动开发转为机器学习和深度学习。感谢我的老板给我很大的空间去开拓新…

做网站需要用socket吗莱芜网站制作

所谓的冷备和热备,冷备就是不用vrrp和hsb协议同步ap和用户信息,主的断了等七十五秒后,备的capwap和ap连接上去。 双链路冷备不用vrrp和hsb 双链路热备份只用hsb同步ap和用户信息,不用vrrp,两个ac可以不用在同一个二层…

沙田镇网站建设wordpress会话已过期

在进行媒体查询的编写的时候,我们可以利用scss与与编译器,通过include混入的方式对代码进行简化,从而大大提高了代码的可维护性,也减少了代码的编写量,废话不多说,直接上代码: // 断点列表 相当…

如何设定旅游网站seo核心关键词梵高网站建设

我们听说过很多关于测试驱动开发(TDD)的内容。那么什么是ATDD? ATDD代表验收测试驱动开发,这是一种定义验收标准并创建自动化测试来验证是否满足这些标准的软件开发方法。ATDD是一种协作方法,涉及客户、开发人员和测试…

如何用网站做淘宝客滴道网站建设

一、最终效果为了不浪费大家时间,先展示最终效果,看看是不是大家需要的解决方案:标准分辨率:其他分辨率的适配情况:二、需求1.canvas的内容能全部展示在屏幕上2.尽量能保证图像不变形3.绘制的文字也能自适应三、解决方…

做视频播放网站站酷网站的比赛网页谁做的

可以将 nginx 作为一个非常高效的 HTTP 负载均衡器,将流量分配到多个应用服务器上,并通过 nginx 提高 Web 应用的性能、可扩展性和可靠性。 nginx 可以通过添加一个 upstream,来实现 nginx 的负载均衡功能。 upstream myserver {server 192…

石家庄网站建立兰州网络推广范文

M/M/m排队模型 (单队列多服务台并联服务模型) 数学建模: 基于生灭过程的理论计算和基于事件推进的Matlab模拟仿真思路 原创文章,转载文章请注明出处:©️Sylvan Ding 🎉🎉🎉 摘要 本文研究M/M/m单队列多服务台并…

深圳市制作网站百度关键词多少钱一个月

第十七天课堂笔记 Java常用类 数学类★★★ math java.lang.Math , 数学类 round(x) : 四舍五入 , 把 x加0.5 后向下取整 ceil(x) : 返回大于等于x的最小整数 , 向上取整 floor(x) : 返回小于等于x的最大整数 , 向下取整 sqrt(x) : 平方根 cbrt(x): 立方根 pow(a , b)…

建筑人才网站哪个比较好绍兴网站制作建设

一、界面预览鼠标放到右边的Tab按钮上&#xff0c;文字透明度降低&#xff0c;同时一段文字高亮显示&#xff0c;效果如下&#xff1a;Demo地址&#xff1a;http://5thirtyone.com/sandbox/samples/fadefocus/很绚丽的效果幺&#xff01;二、实现原理将要高亮显示的文字加上<…

淄博网站建设淄博中国十大软件外包公司排名

1. 模型介绍&#xff1a; 生产者消费者模型是操作系统中的一种并发编程模型&#xff0c;用于解决生产者和消费者之间的数据共享和同步问题。 在该模型中&#xff0c;生产者负责生成数据&#xff0c;并将数据放入一个有限的缓冲区中&#xff0c;而消费者则从缓冲区中取出数据进…

怎么设置网站名称长荣建设深圳公司网站

问题说明前几天运维同事反馈开发同事代码在Windows 2008 R2 Datacenter服务器上跑会出现无法正常建立SSL/TLS连接的情况&#xff0c;在自己的电脑上跑是OK的&#xff0c;代码也没有变动过。于是我问他改了服务器上什么配置没有&#xff0c;他说改了注册表也不行。接过这个坑&am…

游戏网站建设多少钱企业邮箱入口163

常用命令 命令说明git submodule add <url> <本地路径>添加子模块git submodule update --init --recursive添加子模块后&#xff0c;同步子模块内容git clone <url> --recurse-submodules克隆带有子模块的项目git submodule init初始化子模块git submodule…