浅忆

文章 评论 浏览 30

浅忆 2025-02-20 22:47:43

您不应该在系统运行的脚本中依靠您的“当前”或“工作”目录。指定要输出文件的整个路径。

can 使用os.chdir()使您的首选目的地成为当前的dir,但这不是最好的方法。完整的路径。

You shouldn't rely on your "current" or "working" directory in a script run from the system. Specify the full path to where you want your output files.

You can use os.chdir() to make your preferred destination your current dir, but that's not the best way. Full paths.

从Windows计划的任务运行的Python脚本是将数据存储在错误的文件夹中

浅忆 2025-02-20 21:59:48

我在电子应用程序(Eleponon JS 22.2)的问题上遇到了完全相同的问题:DevTools在我添加了sirce('exceljs')之后停止工作。
在GitHub上的Electronjs repo上,有一个开了问题对于这个问题。解决方法(来自对该问题的评论):

mainWindow.on("ready-to-show", () => {
  mainWindow.webContents.openDevTools();
});

I had the exact same problem with an electron app (electon js 22.2) : devTools stopped working after I added require('exceljs') to my code.
On electronjs repo on github, there is an opened issue for that problem.. here is a workaround (from a comment on that issue) :

mainWindow.on("ready-to-show", () => {
  mainWindow.webContents.openDevTools();
});

无法打开“开发人员工具”在电子应用中

浅忆 2025-02-20 20:03:23

如果像我一样,您在尝试本地运行您的功能时会遇到此错误,那是因为functions.config()仅在云函数运行时可用。

如果您要在部署之前试图测试您的功能,则是有关如何执行的文档的链接:在本地运行函数。具体来说,此部分引起了人们的关注:

如果您使用自定义功能配置变量,请在运行firebase服务之前在项目的功能目录中运行以下命令。

firebase functions:config:get > .runtimeconfig.json

但是,如果您使用的是Windows PowerShell,请用以下方式替换上述命令

firebase functions:config:get | ac .runtimeconfig.json

If, like me, you got this error while trying to run your functions locally then it's because functions.config() is only available within the Cloud Functions runtime.

If you are trying to test your functions before you deploy, here is the link to the documentation on how to do so: run functions locally. Specifically, this part is of interest:

If you're using custom functions configuration variables, run the following command in the functions directory of your project before running firebase serve.

firebase functions:config:get > .runtimeconfig.json

However, if you're using Windows PowerShell, replace the above command with:

firebase functions:config:get | ac .runtimeconfig.json

无法从函数来源生成表现来源:typeError:无法读取未定义的属性(reading' secret')react js node js js

浅忆 2025-02-20 13:31:47

您可以像提到的那样直接使用迭代器,也可以保留第二个集合,然后将要删除的每个项目添加到新集合中,然后在末尾删除。这使您可以继续以增加内存使用时间和CPU时间为代价来使用for-EAK循环的类型安全(除非您确实有真正,很大的列表或真正旧的计算机,否则不应该是一个巨大的问题)

public static void main(String[] args)
{
    Collection<Integer> l = new ArrayList<Integer>();
    Collection<Integer> itemsToRemove = new ArrayList<>();
    for (int i=0; i < 10; i++) {
        l.add(Integer.of(4));
        l.add(Integer.of(5));
        l.add(Integer.of(6));
    }
    for (Integer i : l)
    {
        if (i.intValue() == 5) {
            itemsToRemove.add(i);
        }
    }

    l.removeAll(itemsToRemove);
    System.out.println(l);
}

You can either use the iterator directly like you mentioned, or else keep a second collection and add each item you want to remove to the new collection, then removeAll at the end. This allows you to keep using the type-safety of the for-each loop at the cost of increased memory use and cpu time (shouldn't be a huge problem unless you have really, really big lists or a really old computer)

public static void main(String[] args)
{
    Collection<Integer> l = new ArrayList<Integer>();
    Collection<Integer> itemsToRemove = new ArrayList<>();
    for (int i=0; i < 10; i++) {
        l.add(Integer.of(4));
        l.add(Integer.of(5));
        l.add(Integer.of(6));
    }
    for (Integer i : l)
    {
        if (i.intValue() == 5) {
            itemsToRemove.add(i);
        }
    }

    l.removeAll(itemsToRemove);
    System.out.println(l);
}

通过集合进行迭代,避免在循环中删除对象时进行contrentModification Exception

浅忆 2025-02-20 01:38:40

您可以使用

echo 'a/b/c' | sed 's,\([^/]*\)/.*,\1,'

详细信息

  • \([^/]*\) - 组1(\ 1): /
  • / - a / char
  • 。* - 字符串的其余部分。

或者,如果您有变量,则可以使用字符串操作:

s='a/b/c'
echo "${s%%/*}"
# => a

在此,%%从末端删除最长的子字符串,与/* glob模式匹配,直到字符串中的第一个/

You can use

echo 'a/b/c' | sed 's,\([^/]*\)/.*,\1,'

Details:

  • \([^/]*\) - Group 1 (\1): any zero or more chars other than /
  • / - a / char
  • .* - the rest of the string.

Or, if you have a variable, you can use string manipulation:

s='a/b/c'
echo "${s%%/*}"
# => a

Here, %% removes the longest substring from the end, that matches the /* glob pattern, up to the first / in the string including it.

击败SED替换为第一次驱动到右

浅忆 2025-02-20 00:46:21

简单的方法是在时间戳上创建索引,然后名称:

CREATE INDEX my_idx ON mosmix_data(timestamp, name)

timestamp是索引第一列的良好候选者,因为这是您where strause中最紧的条件(在内部范围为4天)。

通过将name放在索引中,喜欢条件,因为第一个字符是未知的(它是>%),它不会使用索引可以在索引中的值上执行,而不必从表中检索行。

The simple way is to create an index on timestamp then name:

CREATE INDEX my_idx ON mosmix_data(timestamp, name)

timestamp is a good candidate for the first column of the index because that's the tightest condition in your where clause (within a range of 4 days).

By putting name in the index too, the like condition, which will not use an index because the first character is unknown (it's %), can be executed on the value in the index rather than having to retrieve the row from the table.

是否可以加速此Postgres / SQL(读)查询?

浅忆 2025-02-19 22:34:27

deepcopy 有意复制正在复制的结构中的任何别名引用。它维护备忘录在当前复制操作期间已经复制的对象的字典,当再次看到相同的对象时,它将别名插入已经复制的对象。除其他事项外,这使得递归数据结构安全(非遗传deepcopy将永远恢复,直到记忆用尽并死亡)。

如果您希望各个元素都不陈述,deepcopy单独使用,例如:

 l2 = [copy.deepcopy(x) for x in l1*3]

分离的deepcopy操作维护单独的回忆字典。

deepcopy intentionally replicates any aliased references within the structure being copied. It maintains a memo dictionary of objects already copied during the current copy operation, and when the same object is seen again, it inserts an alias to the already copied object. Among other things, this makes it safe with recursive data structures (where a non-memoized deepcopy would recurse forever until it ran out of memory and died).

If you want the individual elements to be unaliased, deepcopy them individually, e.g.:

 l2 = [copy.deepcopy(x) for x in l1*3]

where the separated deepcopy operations maintain separate memoization dictionaries.

Python DeepCopy不使用 *操作员删除列表中的内部参考?

浅忆 2025-02-19 03:07:49

关键字是块范围,一旦在该范围之外无法访问范围内声明。

在您的情况下,关键字位于_test的范围:function(){}。通过将其移到外面将完成工作。

let checkBox = document.getElementById("checkboxFullDownload");
_test: function() {
  if (checkBox.checked) {
    console.log("Checked");
    localStorage.setItem(`${xmlTitle} ID:${this.item._id}`, "AllowFullDownload");
    checkBox.checked = true;
  }

  if (!checkBox.checked) {
    console.log("Unchecked");
    localStorage.removeItem(`${xmlTitle} ID:${this.item._id}`);
    checkBox.checked = false;
  }
}
if (localStorage.getItem(`${xmlTitle} ID:${_test.item._id}`) === "AllowFullDownload") {
    checkBox.checked = true;
    console.log("set to true");
}

let keyword is block scope once declared in scope cannot be accessed outside of that scope.

In your case let keyword is in the scope of _test: function(){}. By moving it outside will do the work.

let checkBox = document.getElementById("checkboxFullDownload");
_test: function() {
  if (checkBox.checked) {
    console.log("Checked");
    localStorage.setItem(`${xmlTitle} ID:${this.item._id}`, "AllowFullDownload");
    checkBox.checked = true;
  }

  if (!checkBox.checked) {
    console.log("Unchecked");
    localStorage.removeItem(`${xmlTitle} ID:${this.item._id}`);
    checkBox.checked = false;
  }
}
if (localStorage.getItem(`${xmlTitle} ID:${_test.item._id}`) === "AllowFullDownload") {
    checkBox.checked = true;
    console.log("set to true");
}

复选框问题 - 无法设置null的属性(设置&#x27; checked&#x27;)

浅忆 2025-02-18 15:35:13

您的setUser(wonse);调用来自strapi用户权限提供商的响应,看起来像这样:

data : {
  user: {
    ...
  },
  jwt: ...
}

https://docs.strapi.io/developer-docs/latest/latest/plugins/plugins/plugins/permissions.html#login

尝试在此对象上访问IDUSER。

Your setUser(response); call takes in a response from the Strapi User Permissions provider which looks something like this:

data : {
  user: {
    ...
  },
  jwt: ...
}

https://docs.strapi.io/developer-docs/latest/plugins/users-permissions.html#login.

Trying to access idUser on this object is not defined.

登录时如何从strapi中正确获取用户ID?

浅忆 2025-02-18 11:16:49

最终在YouTuber Cradletograver的帮助下发现了这个问题。用户错误!它是在conditionalformatting()中的“规则”公式中使用的,

我一直在使用openxlsx文档中的格式示例(例如,rule =“ $ colname = 1”,但将其应用于字符串(例如,rule =” $ colname = yes”),这就是为什么Excel无法识别它。

单引号(例如,rule ='$ colname =“ yes”

有条件地格式化字符串时,请使用围绕该值的双引号围绕规则的 展示如何在此视频中为文本值格式化, https://wwww.youtube.com/watch.com/watch.com/watch ?v = acdcquqjxhu

Finally discovered the problem with the help of YouTuber CradleToGraveR. User error! It was in the formula for the "rule" within conditionalFormatting()

I had been using the formatting examples in the documentation for openxlsx (e.g., rule = "$colname=1", but applying it to a string (e.g., rule = "$colname=YES"), which is why Excel didn't recognize it.

When conditionally formatting strings, use single quotes around the rule with double quotes around the value (e.g., rule = '$colname="YES"').

CradleToGraveR shows how to format for text values in this video, https://www.youtube.com/watch?v=ACdCQuQJxhU

将数据框出到R中的多个Excel工作簿中,并完整有条件格式

浅忆 2025-02-18 08:12:38

带有单引号

后斜线随后是新线,将其传输到SED。然后,SED实际上使用后斜线将原始的Newline字符逃脱到字符串中,而不是终止命令。请参阅:

$ printf %s 'hello\
world' | hexdump -C

清楚地显示Backslash 5C后面是String中包含的Newline 0a

00000000  68 65 6c 6c 6f 5c 0a 77  6f 72 6c 64              |hello\.world|
0000000c

带有双引号

后斜线在双引号中具有特殊的含义。它导致以下newline字符被解释为字符串延续字符。结果是,后斜线或新线都不包含在字符串中,因此SED看不到。

$ printf %s "hello\
world" | hexdump -C

该字符串在没有后斜线的情况下继续进行,没有newline:

00000000  68 65 6c 6c 6f 77 6f 72  6c 64                    |helloworld|
0000000a

编辑

  • SED实际上使用Backslash来逃避以下Newline字符,如@dan指出了@dan。

With single-quotes:

The backslash followed by the newline are transmitted as-is to sed. Then sed actually uses the backslash to escape the raw newline character into the string rather than terminating the command. See:

$ printf %s 'hello\
world' | hexdump -C

Which clearly shows the backslash 5c followed by the newline 0a contained in the string.

00000000  68 65 6c 6c 6f 5c 0a 77  6f 72 6c 64              |hello\.world|
0000000c

With double-quotes:

The backslash has special meaning in double-quotes. It causes the following newline character to be interpreted as a string continuation character. The consequence is that neither the backslash or the newline are contained in the string and so not seen by sed.

$ printf %s "hello\
world" | hexdump -C

The string is continued without backslash and without newline:

00000000  68 65 6c 6c 6f 77 6f 72  6c 64                    |helloworld|
0000000a

EDIT:

  • Precised that sed actually uses the backslash to escape the following newline character as @dan pointed out.

如何在“ sed”的参数文本中插入newline单价和双引号下的实用程序?

浅忆 2025-02-18 07:45:32
$sections = Post::with('meta')->where([
'type' => 'section',
'language' => 'it',
'status' => 'published',
])->get();

在执行不善的情况下,您需要每个数组的3个参数来咨询:

$sections = Post::with('meta')->where([
['type' '=>' 'section'],
['language' '=>' 'it'],
['status' '=>' 'published'])->get();

我不确定您要构建的查询构建器是什么,因为对我来说,它看起来更像是用这些箭头的分配。 ......无论您现在至少有正确的格式。

$sections = Post::with('meta')->where([
'type' => 'section',
'language' => 'it',
'status' => 'published',
])->get();

That Where clousure is not well executed, you need 3 parameteres per array to consult, like this:

$sections = Post::with('meta')->where([
['type' '=>' 'section'],
['language' '=>' 'it'],
['status' '=>' 'published'])->get();

And i'm not pretty sure what's the query builder you are trying to build because to me it looks like more like an assignation with those arrows.......whatever but at least you have the correct format now.

不能按关系字段排序

浅忆 2025-02-17 21:39:49

index.html中,在中,如果(13 === e.KeyCode){...}语句,window.electronapi的参数.sendpin(...);调用是错误的情况。它应该是PIN,应该是PIN

也就是说,pin在您的const handlekeyup = function(e){...}函数中未更新,因此按下“ enter”(或“返回”)时。 ,它无法将更新的PIN发送到您的渲染过程。

仔细查看index.html文件中包含的JavaScript代码:

  1. 无需停止事件传播。
  2. Regex的事情可能很棘手,有时很难实施。仅在您真正需要的情况下才使用它们。
  3. 看来您使用#display值,而不是使用已定义的pin变量来构建您的pin> pin

继续使用已定义的pin变量,您可以一起使用鼠标和键盘(如果用户真正想要)输入PIN。

使用 data-attributes> data-attributes 是一种明智的方式标准化键PIN-PAD输入。将这个想法扩展到“输入”和“清晰”按钮将是一个好主意。将数据属性值转换为较低的情况并与有效的密钥列表进行比较仍然是必经之路。为“清除”按钮添加快捷方式c也可以工作。 PS:ESC也可以实现以清除显示。

最后,使用JavaScript使用JavaScript添加和删除包含颜色的CSS类名称,而不是通过手动添加和删除凹陷的按钮背景颜色。将CSS设置保留在样式表中,可以进行良好的代码分离且容易调试。 PS:有时,人们在其CSS类名称中添加JS - < / code>前缀,该名称由JavaScript切换 /控制。


在下面,我在CSS中添加了其他悬停/JS depressed类,以涵盖鼠标和键盘用户的反馈。

pinpad.css(渲染过程)

#pin-pad div:hover,
#pin-pad div.js-depressed {
    background-color: #ccc;
}

,我借此自由来刷新您的index.html javascript稍微删除不必要的代码行,并简化了键盘的实现(与鼠标)实现。

可以进行更多的重构以保持代码干燥(如果愿意,请不要重复)。

使您的代码尽可能简单,可以易于阅读 /调试代码。

<!DOCTYPE html>
<html lang="en">
    <head>
        <link rel="stylesheet" href="pinpad.css"/>

        <meta charset="UTF-8"/>
        <title>Electron Test - Pin Pad</title>
        <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';"/>
    </head>

    <body>
        <div id="container">
            <div id="wrapper">
                <input type="text" id="display" disabled/>

                <div id="pin-pad">
                    <div data-key="1">1</div>
                    <div data-key="2">2</div>
                    <div data-key="3">3</div>
                    <div data-key="4">4</div>
                    <div data-key="5">5</div>
                    <div data-key="6">6</div>
                    <div data-key="7">7</div>
                    <div data-key="8">8</div>
                    <div data-key="9">9</div>
                    <div data-key="enter">Enter</div>
                    <div data-key="0">0</div>
                    <div data-key="clear">Clear</div>
                </div>
            </div>
        </div>
    </body>

    <script>
        let display = document.getElementById('display');
        let validKeys = [
            '1',
            '2',
            '3',
            '4',
            '5',
            '6',
            '7',
            '8',
            '9',
            '0',
            'enter',
            'clear',
            'backspace'
        ];
        let pin = "";

        // Mouse input
        document.getElementById('pin-pad').addEventListener('click', (event) => {
            let key = event.target.dataset.key;

            if (! validKeys.includes(key)) {
                return;
            }

            if (key === 'enter') {
                window.electronAPI.sendPin(pin);
                return;
            }

            if (key === 'clear') {
                pin = display.value = "";
                return;
            }

            pin = pin + key;
            display.value = '*'.repeat(pin.length);
        });

        // Keyboard input
        document.addEventListener('keydown', (event) => {
            let key = event.key.toLowerCase();

            if (! validKeys.includes(key)) {
                return;
            }

            if (key === 'backspace') {
                pin = pin.slice(0, -1);
                display.value = "*".repeat(pin.length);
                return;
            }

            document.querySelector(`[data-key="${key}"]`).classList.add('js-depressed');

            if (key === 'enter') {
                window.electronAPI.sendPin(pin);
                return;
            }

            pin = pin + key;
            display.value = '*'.repeat(pin.length);
        });

        document.addEventListener('keyup', (event) => {
            let key = event.key.toLowerCase();

            if (! validKeys.includes(key) || key === 'backspace') {
                return;
            }

            document.querySelector(`[data-key="${key}"]`).classList.remove('js-depressed');
        });
    </script>
</html>

一个人没有考虑到弹跳。即:如果用户将手指握在钥匙上,则输入将以快速速率重复填充引脚场。如果不需要此行为,则可能希望添加“弹跳”功能。

In reference to index.html, within the if (13 === e.keyCode) { ... } statement, the argument of the window.electronAPI.sendPin(...); call is of the incorrect case. Instead of Pin, it should be pin.

That said, pin is not updated within your const handlekeyUp = function (e) { ... } function, so when "Enter" (or "Return") is pressed, it can't send an updated pin to your render process.

Looking closer at your JavaScript code contained within your index.html file:

  1. There would be no need to stop event propagation.
  2. Regex's can be tricky things and hard to implement at times. Only use them if you really need to.
  3. It appears that you are use the #display value instead of using the already defined pin variable to build your pin.

Continuing to use the already defined pin variable allows you to use both the mouse and the keyboard together (if the user really wants to) to enter a pin.

Use of data-attributes is a smart way to standardize key pin-pad input. Extending this idea to the "Enter" and "Clear" buttons would be a great idea. Converting the data-attribute value to lower case and comparing against a valid list of keys is still the way to go. Adding a shortcut for the "Clear" button c can work as well. PS: esc could also be implemented to clear the display.

Lastly, instead of manually adding and removing the depressed button background color via Javascript, use Javascript to add and remove a CSS class name containing the color. Keeping CSS settings within your style sheet(s) allows for good code separation and easy of debugging. PS: Sometimes, people add a js- prefix to their CSS class names that are toggled / controlled by Javascript.


Below, I have added an additional hover / js-depressed class to your CSS to cover mouse and keyboard user feedback.

pinpad.css (render process)

#pin-pad div:hover,
#pin-pad div.js-depressed {
    background-color: #ccc;
}

Below, I took the liberty to rework your index.html Javascript a little bit to remove unnecessary lines of code and simplify the implementation of keyboard (along with mouse) implementation.

Even more refactoring could be performed to keep your code DRY (Don't Repeat Yourself) if you wanted to.

Keeping your code as simple as possible makes for easy to read / debug code.

<!DOCTYPE html>
<html lang="en">
    <head>
        <link rel="stylesheet" href="pinpad.css"/>

        <meta charset="UTF-8"/>
        <title>Electron Test - Pin Pad</title>
        <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';"/>
    </head>

    <body>
        <div id="container">
            <div id="wrapper">
                <input type="text" id="display" disabled/>

                <div id="pin-pad">
                    <div data-key="1">1</div>
                    <div data-key="2">2</div>
                    <div data-key="3">3</div>
                    <div data-key="4">4</div>
                    <div data-key="5">5</div>
                    <div data-key="6">6</div>
                    <div data-key="7">7</div>
                    <div data-key="8">8</div>
                    <div data-key="9">9</div>
                    <div data-key="enter">Enter</div>
                    <div data-key="0">0</div>
                    <div data-key="clear">Clear</div>
                </div>
            </div>
        </div>
    </body>

    <script>
        let display = document.getElementById('display');
        let validKeys = [
            '1',
            '2',
            '3',
            '4',
            '5',
            '6',
            '7',
            '8',
            '9',
            '0',
            'enter',
            'clear',
            'backspace'
        ];
        let pin = "";

        // Mouse input
        document.getElementById('pin-pad').addEventListener('click', (event) => {
            let key = event.target.dataset.key;

            if (! validKeys.includes(key)) {
                return;
            }

            if (key === 'enter') {
                window.electronAPI.sendPin(pin);
                return;
            }

            if (key === 'clear') {
                pin = display.value = "";
                return;
            }

            pin = pin + key;
            display.value = '*'.repeat(pin.length);
        });

        // Keyboard input
        document.addEventListener('keydown', (event) => {
            let key = event.key.toLowerCase();

            if (! validKeys.includes(key)) {
                return;
            }

            if (key === 'backspace') {
                pin = pin.slice(0, -1);
                display.value = "*".repeat(pin.length);
                return;
            }

            document.querySelector(`[data-key="${key}"]`).classList.add('js-depressed');

            if (key === 'enter') {
                window.electronAPI.sendPin(pin);
                return;
            }

            pin = pin + key;
            display.value = '*'.repeat(pin.length);
        });

        document.addEventListener('keyup', (event) => {
            let key = event.key.toLowerCase();

            if (! validKeys.includes(key) || key === 'backspace') {
                return;
            }

            document.querySelector(`[data-key="${key}"]`).classList.remove('js-depressed');
        });
    </script>
</html>

One this not taken into account if de-bouncing. IE: If the user holds their finger on a key, the input will repeat at a rapid rate fill the pin field. If this behavior is not desired then a "de-bouncing" function may wish to be added.

添加了键代码函数后不起作用的电子API

浅忆 2025-02-17 05:03:18

另外,您可以使用索引使用[:]访问列表的操作员:

M = [[0,1,0,1],[0,0,1,0]]

for i in range(len(M)):
  for j in range(len(M[i])):
    print(M[i][j])

Also, you can use indexes to traverse the elements using [:] accessing operator for lists:

M = [[0,1,0,1],[0,0,1,0]]

for i in range(len(M)):
  for j in range(len(M[i])):
    print(M[i][j])

如何使用for-loop从列表列表(矩阵)获取每个元素

浅忆 2025-02-17 04:18:48

通常,在创建订单时,您需要在创建订单时使用客户ID。因此,您通过电子邮件检查该客户是否存在?如果这样做,您只需提供ID即可。如果您跳过该步骤(请记住,客户是Shopify订单的一个单独的方面),那么您可能会遇到此问题。给Shopify提供了一封电子邮件,试图创建客户,系统说停在那里,该客户已经存在,您从未提供ID。

听起来很奇怪,但是也许您从未遇到这个问题,因为您从来没有遇到过乡间的客户?如您所知,大多数订单是一次性的,并且在很多商店中都不重复。

不确定这种解释是完全有意义的,但是无论如何,我发现的解决方法只是在尝试创建订单之前建立客户。您要么为现有的ID使用ID,要么创建新的ID。

Usually when creating orders, you would want to use a Customer ID for an order when creating it. So you check, via email, does this customer even exist? If it does, you just provide the ID. If you skip that step (remember, customers are a separate aspect of Shopify Orders), you may then run into this issue. Shopify is given an email, tries to create a customer, and the system says STOP RIGHT THERE, this customer already exists, and you never provided an ID.

Sounds weird, but maybe you never encountered this issue because you just never ran into repeat customers? As you know, most orders are one-time and not repeat at a lot of stores.

Not sure this explanation makes total sense, but anyway, the workaround I found was just to establish the customer BEFORE trying to create the order. Either you use an ID for an existing one, or, create a new one.

Shopify创建订单Admin API不突然收到电子邮件

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文