归档

20222月(2)

标签

产品(1)

技术(5)

Nginx 的 Rewrite 重写

2022/02/20

最近有个网站部署的需求:访问www.a.com跳转到www.a.com/b/index.html,但是访问其它子域名的时候还是访问对应的子域名,比如访问www.a.com/c/index.html等还是跳转到www.a.com/c/index.html。我们分析下这里面涉及2个环节,一个是网址的精准匹配,即精准匹配 www.a.com,另外一个就是匹配后就重写到www.a.com/b/index.html。


对应到技术处理角度来说,就是需要精准匹配到主域名然后跳转到对应的网址,也即是rewrite,可以通过在nginx配置文件中添加以下配置信息,vim /etc/nginx/nginx.conf:

location = / {

    rewrite ^(.*)$ https://www.a.com/b/index.html break;

}


这样就可以实现上述需求了。

#技术

猴哥

关注产品,闲聊生活。

一次不愉悦的产品体验引发的后续

2022/02/24

我们日常工作中免不了要和文档打交道,在线文档可以很方便的和他人协作,市场上有腾讯文档、金山文档、石墨文档,就连钉钉自己也出了自己的文档产品,我平时用石墨文档比较多,因为它的小而美,不论是和团队内部还是外部人员的协作,用起来都很舒服。


最近石墨官方又出了一个应用表格的产品,我尝试用了下,这几天用下来感受下来还不错,但是其中特别糟心的是每次更新一次数据,总会下意识按下 command +s Windows 上是 ctrl + s)保存,而它总是会弹出一个保存当前网页的窗口。但石墨现在的在线文档和在线表格对于这个快捷键的保存操作都是自动保存的,而我也早已习惯了这一操作,所以今天花了点时间弄了一个脚本禁用了这个操作,终于解决了烦人的弹窗,心情愉悦不少。


当然今天不是来说这个脚本是如何实现的,而是这个快捷键的操作引发了另一个思考。尤记得 08 年刚上高中,那会还用过一段时间的诺基亚 5320,拿到手机那一刻,玩的最多就是手机上的单机游戏,当时只觉得很神奇,在这么一块小小的屏幕上,居然还可以把游戏玩的那么爽。


而紧随着 07 iPhone 的发布,作为后来的入局者,苹果凭借 iOS 流畅的系统和出色的触摸屏最终打败了诺基亚,在同年 11 月,Google 以免费开源的授权方式,正式发布 Android 源代码,一时间各大厂商纷纷下场推出自己的智能手机,可以说在 iPhone 的引领下, Android 将智能手机进一步推向了大众。而在趋势的浪潮下,曾经撑起了诺基亚这艘巨船的功能机时代,则被历史的浪花无情地拍打到了沙滩上。

#产品

本地请求远程的接口报错

2022/02/24

浏览器只允许请求当前域的资源,而对其他域的资源表示不信任。那怎么才算跨域呢?

请求协议http,https的不同

域domain的不同

端口port的不同

又一个快速解决方案是在服务端设置可以跨域请求

from flask import Flask

from flask_cors import CORS

app = Flask(__name__)

CORS(app)

#技术

参考文章:https://www.jianshu.com/p/89a377c52b48

执行命令设置可编辑区域

2022/03/02

当一个HTML元素的contenteditable属性被设置为true时,document.execCommand() 方法便可使用。通过该方法,你可以运行相关commands 来操作可编辑区域的内容。其中大多数命令都会影响文档的选择,例如,给文本提供一个样式(加粗,倾斜等)、插入新元素(如增加一个链接)、影响一整行文本(如缩进排版)。当使用contentEditable后,调用execCommand()方法将影响当前处于活动状态的可编辑元素。


下面是一个简单的示例,创建一个"contenteditable"属性为"true"的div元素,用户就可以编辑其内容了。

<div contenteditable="true">

  This text can be edited by the user.

</div>

#技术

参考文章:https://developer.mozilla.org/zh-CN/docs/Web/Guide/HTML/Editable_content

mac下安装chromedriver

2022/02/20

一、查看版本

首先查看你现在的Chrome的版本

#技术

二、找到对应版本

根据你的Chrome版本找到对应的chromedriverSupports Chrome v70-72 的网址为: http://chromedriver.chromium.org/downloads

其他版本的下载网址为:http://chromedriver.storage.googleapis.com/index.html

如果版本没对应上,则无法正常唤起Chrome

三、将驱动放入可执行文件夹中

将解压好的文件放入/usr/local/bin目录中,由于mac的很多目录都是隐藏的,所以我们按快捷键command+shift+g,在弹出的窗口输入/usr/local/bin,就可以打开这个目录,接着将解压好的驱动放入此目录即可。

四、进行测试

在终端输入: chromedriver --version,可以查看到版本

python学习——while True的用法

2022/02/20

在学习过程中,经常能遇到采用while True的用法。下面以一个例子进行说明:

建立一个用户登录系统,用户输入用户名和密码,如果正确就可以进入系统。


1、我自己最开始的写法:

d = {}        #数据库字典,所有用户的用户名密码存储在此

name = input("请输入您的用户名:")

if name in d:

     password = input("请输入您的密码")

     if d[name] == password:

          print('进入系统')

     else:

          print('您输入的密码错误,请重新输入')

else:

     print('您输入的用户名不正确,请重新输入')

这个自己写的程序逻辑上貌似是对的:

——先让用户输入用户名,如果存在该用户名,就继续让用户输入密码,如果密码正确就进入系统。如果密码不正确就重新输入。

——如果不存在该用户名,提示“您输入的用户名不正确,请重新输入”


但是在实际运行过程中,如果用户输入的用户名和密码都正确,那自然是没有问题的。但是如果有一个输入不正确,那系统只会显示“您输入的用户名不正确,请重新输入”或“您输入的密码错误,请重新输入”。也就是说,如果出现错误,没有返回到原来的地方,请求继续输入。


2、采用while True循环语句:

采用该语句的核心思想是如果出现错误的话,可以继续循环。

d = {}


while True:

     name = input('请输入您的用户名:')

     if name in d:

          break

     else:

          print('您输入的用户名不存在,请重新输入')

          continue


while True:

     password = input('请输入您的密码:')

     if d[name] == password:

          print('进入系统')

          break

     else:

          print('您输入的密码不正确,请重新输入')

          continue


以上程序就可以达到所需目的:在输入用户名或密码错误的情况下返回到开始部分,请求继续输入。

while True 语句中一定要有结束该循环的break语句,否则会一直循环下去的。

当然,我们遇见过如果密码错误的话,提示您还有几次输入密码的机会。可以这样实现:

count = 5

while count:

     password = input('请输入您的密码:')

     if d[name] == password:

          print('进入系统')

          break

     else:

          count -= 1

          print('您输入的密码不正确,还有{}次输入机会'.format(count))

          continue


参考文章:https://blog.csdn.net/geerniya/article/details/77524173

#技术

javascript - 如何通过innerText获取元素

2022/03/07

需要手工遍历。

var aTags = document.getElementsByTagName("a");

var searchText = "SearchingText";

var found;


for (var i = 0; i < aTags.length; i++) {

  if (aTags[i].textContent == searchText) {

    found = aTags[i];

    break;

  }

}


// Use `found`.

#技术