微软azure免费云服务器实操

进azure,

注册,绑卡(可用双币信用卡),

里面可以送200刀有效期1个月,第一个月内改成即用即付模式就liunx和windows各一台1年免费,如果1个月内没改就会直接帐户失效

还有一些其它始终免费的服务,比如翻译每月有200万的免费额度,个人完全够用。

创建虚拟机资源,注意选可以免费用的镜像和免费用的64G硬盘,在可用性选项中要选没有基础结构冗余的,大小选择B1s这种1核1G的,在网络中新建公网IP,在里面SKU选基本,动态IP,要不会产生费用,但弹性动态公网IP会在每次关机再启动后变动,直接重启是不变的,所以要固定IP的就会要另想办法。

选的ubuntu在建资源时一般会建一个azureuser用户,并下载一个ppm私钥,如连接不上可以在里面修改密码然后不用私钥,直接用密码连接,

我一般在创建时就直接选择用帐号密码,比如自己建一个帐号ppp,那你建好你的ubuntu机器后就直接用这个登录,如果要root权限,可以sudo passwd root先把root的密码设置下,然后su root就可以用了。

实测韩国中心区ping值88

要注意还有流量限制,每月只有15G,但好像有人说实际是100G,你可以在之前创建资源时建的《订阅》右下角有个热门免费服务,再在最下面的查看所有免费服务中查看免费资源的使用情况和到期时间等信息!

Flask实现频繁请求限制

要实现频繁请求限制,可以使用Flask插件Flask-Limiter来实现。以下是对代码的修改:

1. 首先,安装Flask-Limiter插件:
```
pip install flask-limiter
```

2. 在代码中导入Flask-Limiter和限制器的配置:
```python
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

# 在app之前配置限制器
limiter = Limiter(app, key_func=get_remote_address)
```

3. 在`get_file_url`函数上添加限制器的装饰器,并设置限制规则:
```python
@app.route('/api/fs/get')
@limiter.limit("10/minute")  # 设置每分钟最多允许10次请求
def get_file_url():
    ...
```

这样一来,每个IP地址每分钟最多只能发送10个请求。可以根据实际需要调整限制规则的参数。

注意:还可以根据需要设置其他限制规则,比如限制特定路径或特定用户的请求频率。详细文档可以参考Flask-Limiter的官方文档

Vue和Flask实现前后端分离

后端采用Flask提供几个Restfull风格的API,前端放弃惯用的flasky常用的Jinja模板引擎,采用灵活的Vue.js框架,顺便实践一把前后端分离。既然前后端分离,那么就需要在开发环境独立创建两个项目。下面逐一介绍。

安装node.js

安装vue,安装webpack,安装vue-cli,创建工程

vue是以组件为单位组织成复杂的页面。我们直接在componets下的HelloWorld.vue上进行代码调整和编写。template部分主要包含一个select元素,value对应后端API,触发button会向选择的后端API发送请求。script部分methods部分实现对元素事件的响应,通过axios与后端服务器进行通信,分别采用get和post方法。具体代码如下图:

<template>
  <div class="hello">
    <button @click="test">测试</button>
    <select v-model="selected" name="url-option">
      <option value="">选择一个Url</option>
      <option value="/api/speech/event_extraction">思必驰警情信息抽取</option>
      <option value="/api/speech/addr_fix">思必驰地址理解</option>
      <option value="/api/gaode/get_poi">高德关键字搜索</option>
    </select>
    <input v-model="input_query" style="width: 400px">
    <button @click="sendRequest">发送请求</button>
    <br></br>
    <textarea style="width: 600px; height: 300px">{{ resp }}</textarea>
  </div>
</template>

<script>
import axios from 'axios'
// 后端服务器地址
axios.defaults.baseURL = 'http://10.67.*.*:5000';
export default {
  name: 'HelloWorld',
  data () {
    return {
      selected: '',
      input_query: '',
      resp: ''
    }
  },
  methods: {
    test () {
      axios
        .get('/api/hello')
        .then(response => {
          console.log(response.data.name)
          this.resp = response.data.name
        })
        .cache(error => {
          console.error(error)
        })
    },
    sendRequest () {
      console.log(this.selected)
      axios
        .post(this.selected, {query: this.input_query})
        .then(response => {
          console.log(response)
          this.resp = response.data
        }).catch(error => {
          console.error(error)
        })
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
  font-weight: normal;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

在vue中还用

v-for 来在前端页面中做for循环,v-on:click=点击,v-if=表示IF语句

后端

打开pycharm,新建一个flask项目

在app.py里编写几个Restfull 风格的API,用于响应前端请求

from flask import Flask, jsonify, request
from flask_cors import CORS
import requests
import json

app = Flask(__name__)
# 实现跨域访问
cors = CORS(app, resources={r"*": {"origins": "*"}})

# get请求
@app.route('/api/hello')
def hello_world():
    content = {
            "name": "网站",
            "num": 3,
            "sites": [{"name": "Google", "info": ["Android", "Google 搜索", "Google 翻译"]},
                      {"name": "Runoob", "info": ["菜鸟教程", "菜鸟工具", "菜鸟微信"]},
                      {"name": "Taobao", "info": ["淘宝", "网购"]}],
            }

    return jsonify(content)

# post请求
@app.route('/api/gaode/get_poi', methods=['POST'])
def get_poi():
    json_data = request.get_json()
    url_prefix = "***"   
    url = url_prefix + '&keywords=' + json_data['query']
    headers = {"Content-Type": "application/json"}
    resp = requests.get(url, headers=headers)
    text = resp.json()
    return text

# 其它接口此处可进行补充.............

if __name__ == '__main__':
    app.run(
        # TODO 设置无效,原因未知
        # host='10.67.*.*',
        # port='5000',
        # debug=True
    )

通过 Data URI Scheme 的方式来引入图片到网页

常见的图片加载方式

一般而言,最常见的图片加载方式是 HTTP URI Scheme 简称 HTTP URI。例如:某图片存储在又拍云存储上,链接为 https://f.lxpzyy.top/upyun/upcdn.svg。我们可以通过引入图片 HTTP 链接的方式来加载图片。

除此之外,我们可以通过 Data URI Scheme 的方式来引入图片。

<img src=“data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu……/>

Data URI Scheme 的方式和 HTTP URI 的使用较为类似,只是看起来多了很多“乱码”。那这些乱码有什么作用呢?和 HTTP URI 相比,它有什么优势让我们选择它呢?

初识 Data URI

Data URI scheme 简称 Data URI ,是在 RFC2397 中进行定义的。目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。以上方的 Data URI 链接为例:

<img src=“data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu……/>

我们可以看到它由 data,image/svg+xml,base64 以及后面的字符串组成。

data:[][;charset=][;],

这几部分分别为:

  • data: 表示取得数据的协定名称,表明这是一个 Data URI。
  • mime type: 数据类型名称,也是就是 image/svg+xml,如果传入的是个 png 图片,那么可以指定类型为 image/png。
  • charset=: 可不填,默认是 charset=US-ASCII 编码。
  • base64: 是数据的编码方法。
  • encoded data: 经过 base64 编码后的数据。

我们可以看到,除去可不填的 charset=,使用 Data URI 必然会用到 base64 编码,那这个要如何获得呢?

如何获得 base64 编码

最简单的方式是直接上网找一个编码小工具。

现在网上有很多的 base64 编码小工具,他们可以直接将文件或者字符进行 base64 解编码。

除此之外各代码语言也都有其对应的 base64 编码方式,可以很方便地进行编码解码转换:

Data URI 的使用方式及优势

了解了 Data URI 的大致情况,我们来看看它要如何使用。

它主要有两种使用方式,第一种是将处理好的 Data URI 格式数据,放入 HTML 页面代码 img 标签的 src 属性中。这种方式的好处是减少了 HTTP 请求,缺点是无法进行缓存。另一种方式则是将 Data URI 放入到 css 里,优点是浏览器会积极缓存 css 文件来提升加载页面时的速度,缺点是增加了 css 的长度。

那么回到我们最初的问题 Data URI 比 HTTP URI 的优势是什么呢?

相比 HTTP URI,Data URI 拥有以下优势:

  • 使用 Data URI 能够有效减少 HTTP 请求数
  • 不依赖于网络环境,即没有网络的时候页面中的资源也可以被加载出来
  • 可以免除一些极小文件对 HTTP 请求的占用

当然 Data URI 也有不少缺点。经过 Base64 编码后的文件或者数据,通常来说比起原文件体积增大了30%左右,然后 Data URI 通常会写在 css 文件中,不易维护,另外手机端加载 Data URI 资源也比较消耗 CPU 资源。

相比之下,Data URI 还是很值得使用的,现在就有很多场景都使用 Data URI 的方式引入资源,比如百度首页的小图标以及谷歌的首页等。

如果想让网站拥有不同的加载方式,特别是避免因网络状况差导致的无法加载问题,那一定要试试 Data URI。

在考虑使用 Data URI 的过程中,我们可以从以下几点着重考虑:

  • 图片的实际尺寸比较小
  • 不经常更新的资源图片
  • 需要在页面中经常使用的图片

Flask中jsonify和json.dumps用法以及区别(简单案例)

环境:python3.6, Flask1.0.3

flask提供了jsonify函数供用户处理返回的序列化json数据,

而python自带的json库中也有dumps方法可以序列化json对象.

其二者的区别,写个简单的案例实测一下便见分晓。

from flask import Flask
from flask import jsonify
import json

app=Flask(__name__)
app.config['JSON_AS_ASCII'] = False

# 随便定义个json字典
dic={"a":1,"b":2,"c":"你好"}
@app.route('/jsonify')
def jsonifys():
    # Content-Type: application/json
    return jsonify(dic)

@app.route('/jsondumps')
def jsondumps():
    # Content-Type: text/html; charset=utf-8
    return json.dumps(dic,ensure_ascii=False)

if __name__ == '__main__':
    app.run(debug=True)

1.我们先访问 http://127.0.0.1:5000/jsonify 地址查看jsonify返回的json内容为一个JSON格式的字典

{

“a”:1,

“b”:2,

“c”:”你好”

}

检查页面属性看Response内容:其中content-Type:application/json

2.再访问另一个地址 http://127.0.0.1:5000/jsondumps 查看返回的json内容差不多

{“a”:1,”b”:2,”c”:”你好”}

检查页面属性看Response内容:text/html

使用jsonify时响应的Content-Type字段值为application/json,

而使用json.dumps时该字段值为text/html。

ps:

使用jsonify方法是需要添加一句 app.config[‘JSON_AS_ASCII’] = False

而json.dumps方法需要添加参数 ensure_ascii=False

这样做可以避免显示中文乱码。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142355.html原文链接:https://javaforall.cn

宝塔-狂雨小说

bbs.kyxscms.com

PHP建议高一点,实践7.4可用,在PHP设置中安装fileinfo扩展

建好网站后上传源码,伪静态里要选择thinkphp,然后保存,

在数字库操作以下代码,来新建一个采集,然后进后台去采集,但采出来的好像有很多文章并不完整。应该是采集的原站就文章不完整。

INSERT INTO `ky_collect` (`id`, `title`, `charset`, `type`, `url_complete`, `url_reverse`, `pic_local`, `source_url`, `section`, `url_rule`, `url_merge`, `url_must`, `url_ban`, `relation_url`, `rule`, `category_way`, `category_fixed`, `category_equivalents`, `status`, `create_time`, `update_time`, `collect_time`, `update`) VALUES (NULL, 'http://www.shuquge.com/', 'auto', 'novel', '1', '0', '0', '[{"url":"http://www.shuquge.com/category/1_[内容].html","type":"1","param":["1","1227","1",0]},{"url":"http://www.shuquge.com/category/2_[内容].html","type":"1","param":["1","317","1",0]},{"url":"http://www.shuquge.com/category/3_[内容].html","type":"1","param":["1","853","1",0]},{"url":"http://www.shuquge.com/category/4_[内容].html","type":"1","param":["1","230","1",0]},{"url":"http://www.shuquge.com/category/7_[内容].html","type":"1","param":["1","308","1",0]}]', '<body>[内容]</body>', '<li><span class="s1">(*)</span><span class="s2"><a href="[内容1]">(*)</a></span>', '', '', '', '[{"title":"章节页","page":"default","chapter":"1","section":"<dt>(*)正文</dt>[内容]</div>","url_rule":"<dd><a href=\\"[内容1]\\">[章节标题]</a></dd>","url_merge":""}]', '{"category":{"field":"category","source":"default","rule":"<meta property=\\"og:novel:category\\" content=\\"[内容1]\\" \\/> ","merge":"","strip":""},"title":{"field":"title","source":"default","rule":"<meta property=\\"og:novel:book_name\\" content=\\"[内容1]\\" \\/> ","merge":"","strip":"","replace":""},"author":{"field":"author","source":"default","rule":"<meta property=\\"og:novel:author\\" content=\\"[内容1]\\" \\/> ","merge":"","strip":"","replace":""},"serialize":{"field":"serialize","source":"default","rule":"<meta property=\\"og:novel:status\\" content=\\"[内容1]\\" \\/>","merge":"","serial":"连载中","over":"完结","strip":"","replace":""},"pic":{"field":"pic","source":"default","rule":" <meta property=\\"og:image\\" content=\\"[内容1]\\" \\/> ","merge":"","strip":"","replace":""},"content":{"field":"content","source":"default","rule":" <meta property=\\"og:description\\" content=\\" [内容1]\\" \\/> ","merge":"","strip":"","replace":""},"tag":{"field":"tag","source":"default","rule":"<meta property=\\"og:title\\" content=\\"[内容1]\\" \\/> ","merge":"","strip":"","replace":""},"chapter_title":{"field":"chapter_title","source":"0","rule":"<h1>[内容1]<\\/h1>","merge":"","strip":"","replace":""},"chapter_content":{"field":"chapter_content","source":"0","rule":"<div id=\\"content\\" class=\\"showtxt\\">[内容1]<br \\/>","merge":"","strip":"","replace":"[{\\"find\\":\\"<br\\/>\\",\\"replaces\\":\\"\\"}]"}}', '0', '0', '[{"target":"玄幻魔法","local":"18"},{"target":"武侠修真","local":"19"},{"target":"都市言情","local":"21"},{"target":"历史军事","local":"20"},{"target":"科幻灵异","local":"22"}]', '1', '1586771330', '1586774583', '1586793887', '0')

人口负增长,要精简机构

2022年对于中国来说是极不平凡的一年,在今年,我国人口数量史诗级的出现下降,这是除了1960年跟1961年之外,新中国成立之后时隔60年首次出现人口负增长。

其实中国人口会出现负增长在几年前就已经露出端倪,从2014年开始,我国每年结婚登记人数就出现断崖式下跌,在2014年以前,我国每年登记的结婚人数都在逐年上升,在2013年达到顶峰,多达1346万对,但是在2014年之后,我国每年新登记的结婚人数就呈断崖式的下降,到2021年,我国新登记的结婚人数只有764万对,勉强超过2013年的一半。

这是2020年由国家统计局得出的一组数据,目前国有单位人数达到4660万,退休人数在2400万左右,两者相加共计7000多万人,这些人无论是在职还是退休在家的,都是需要国家财政来供养的。

为了更好的理解这7000万是什么概念,我们可以对比看一下之前的数据。

2012年,我国财政供养人员的总数量是5392.6万,短短十年的时间翻了接近一倍。再来看1998年的数据是3300万,肉眼可见,我国财政供养人员是在不断上升的,且增长的速度十分的快。

有这样一种说法我国每13个人就要供养一位吃财政饭的,但是如果去掉老人和小孩,只算有劳动能力的人,可以创造税收的,那相当于是每10个人就得供养一位吃财政饭的。

与国际上普遍的每20个人供养一位吃财政饭,这个数据相比,我国供养的人数明显多了不少,带给社会的压力是非常巨大的。

社交心理学

当一个人A对另一个人B给予很多时,A会更关注B,会更想帮助B

无论你是弱者还是强者,都需要从社会交往中获取安全感和归属感,这是人的基本需要。再坚强的人也有流泪有时候。

一个人能为了解自己,赞许自己的人做一切,这就是古话“士为知己者死”,的原因。因此我们要学习由衷的赞美别人,让别人在与你交往中得到理解和认可

我们更喜欢与好看的人交往,因为我们总觉得样子好其他也好,不过交际还暗藏着第二法则,那就是我们喜欢的人都是和我们相似的,要知道,相似不是天生的,完全可以制造。

提高话语影响力:1.确保所说的内容与谈话对象的切身关系。2。话语简单,3,开门见山,4,首尾原则,讲话中最前面和最后面的两段内容更会被人记住,6.信息图像化。6.互动。

人喜欢和自己同类的人交往,所以要看清一个人,看他身边的朋友就可大概

为达同样的目的,换个思维,从对方的立场来表达,善于利用人们下意识的自我立场,

竞争激烈的时代,让别人慢慢了解你是不可能的,打造良好的第一印象很重要,主动积极地把你最阳光的一面展现出来,别忘了微笑

投其所好,想要别人办事,就先想想对方想要什么,抓住对方的兴趣,让他感觉这件事很有兴趣,产生心理共鸣。

有时候,倾听比表达更能打动人心。

从对方感兴趣的话题谈起,在对方最在行的领域提问。

谈话中,只要你说出“不”,你就会坚持下去,出于人的尊严,即便发现自己说法有误,也会坚持,所以要引导对方说肯定的话。如要说服别人,引导别人,指责别人,别忘了设法让对方首肯,回答一些非得说“是”的问题

回答顾客询价后,促销员说:这个东西很好的,虽然有点贵,客户还是走了,注意在转折句中被强调的部分是后面的部分,

笨蛋贬低对方,聪明人把对方抬高。

适当与他人分享自己的秘密,可以拉近彼此的距离,帮他人守护秘密,同样可以拥有一个贴心的朋友

先让对方答应点小事,无论是对对方提出批评建设还是期望要求,都应该从对方可以接受的程度开始,如一开始提得过于严厉或高不可攀,对方首先从心里开始产生厌恶和畏难情绪,

如果非要选择什么,相信大多数人都希望那是自己做出的决定,所以如果你想说服别人,不要忘记这个原则,让别人觉得那是他自己的主意,满足他的参与感。