pyinstaller --name Analyzer --icon=icon.ico --add-data "icon.ico;." --noconsole --onefile main.py
import os
import sys
import tkinter as tk
from PIL import Image, ImageTk
class AppResources:
def __init__(self, relative_path: str):
self.relative_path = relative_path
self.base_path = self._get_base_path()
self.absolute_path = self._get_absolute_path()
def _get_base_path(self) -> str:
return sys._MEIPASS if hasattr(sys, '_MEIPASS') else os.path.abspath(".")
def _get_absolute_path(self) -> str:
return os.path.join(self.base_path, self.relative_path)
def load_image(self) -> ImageTk.PhotoImage:
return ImageTk.PhotoImage(Image.open(self.absolute_path))
class App(tk.Tk):
def __init__(self, icon_path: str):
super().__init__()
self.icon_path = icon_path
self._setup_ui()
def _setup_ui(self):
self.title("Optimized Tkinter App")
self.geometry("400x300")
self._set_icon()
def _set_icon(self):
resources = AppResources(self.icon_path)
icon = resources.load_image()
self.iconphoto(True, icon)
if __name__ == "__main__":
app = App("icon.ico")
app.mainloop()
Всегда думал что api.php нужно для запроса от сторонних приложений, сайтов к твоему сайту для получения какой то информации, которую я хочу предоставить, без авторизации.Ну, неправильно думали, ничего страшного. Точнее, очень узко. Вот есть у вас сайт, а потом вы решили сделать к нему в пару мобильное приложение. Оно стороннее? Ничего сделать с отданным через WEB HTML оно не сможет*, потребуется API.
в тоже время используя api.php любой человек может запросить любой роут и получить кучу информацииЛюбой человек получит то, что вы ему отдадите. Никакого запрета (или сложностей) на внедрение авторизации в API нет.
Количество Middleware на web.php значительно больше, т.е. любой запрос проходит больше проверок перед тем как выдать результат.Middleware - это любые обработчики, а не только проверки. Т.е. "больше обработчиков не значит больше проверок". Любые обработчики вы можете навесить и на API**. И их даже не надо писать отдельно, в Laravel уже всё есть.
В итоге вопрос, с точки зрения безопасности, производительности есть преимущества api.php перед web.phpС точки зрения безопасности разницы нет. API может быть несколько производительнее за счёт того, что обрабатывает и отдаёт меньше "лишнего". Но по этим аспектам их вообще не надо сравнивать, это всё равно, что выбирать между экскаватором и самосвалом по степени лёгкости угона того или другого.
https://cdn.jsdelivr.net/npm/sweetalert2@11.4.8
<template>
<div>
{{ dataFromAPI }}
тут вызов апи по событию, в вашем случае вы его к чему-нибудь привязываете
<button @click="getAPI">Get API</button>
</div>
</template>
<script>
// смешивать jQuery c Vue - плохой вариант, лучше используйте axios
import axios from 'axios'
export default {
data() {
return {
// тут у вас реактивное свойство
dataFromAPI: null,
}
},
mounted() {
// тут первый вызов апи при загрузке страницы
this.getAPI()
},
methods: {
getAPI() {
return axios
.get('https://api.your.address')
.then(response => {
if (response.data) {
// когда апи возвращает данные передаем их реактивному свойству
// и они обновляются без перезагрузки, как вам надо
this.dataFromAPI = response.data
}
})
// ловим ошибки
.catch(error => {
console.log(error);
})
.finally(() => {
// если надо -- дополнительные действия (выключить лоадер, например)
})
}
}
}
</script>
'file' => 'mimetypes:application/pdf
'file' => 'mimes:application/pdf
<?php
$file = request()->file('file');
$ext = $file->getClientOriginalExtension();
$ext = strtolower($ext);
if (!in_array($ext, ['jpg', 'jpeg', 'png', 'gif'])) {
return response()->json([
'errors' => [
'file' => 'INVALID_EXTENSION',
]
], 400);
}