Хочу сделать тематический портал, с авторскими статьями, и разными функциональными разделами.
Основная ценность портала для посетителя - статьи.
Сам делал сайты простые ручками и на вордпрессе, но на портал нет времени заниматься созданием/администрированием, поэтому планирую найти и нанять специалиста разработчика/админа.
На первом этапе планирую сделать минимально работающий продукт - просто портал со регулярно добавляющимися статьями и навигацией. Когда трафик очевидно начнёт расти - планирую добавлять новые функциональные разделы.
2. Какие платформы порекомендуете?
3. Как не прогадать с выбором разработчика/админа?
4. Может есть какие-то толковые книги/курсы по созданию таких проектов. Имею ввиду не столько технические по коду, сколько по организационным этапам и методике того что учесть нужно.
в Pyrogram документации не нашел подобного
import asyncio
from pyrogram import Client
from pyrogram.errors import PyrogramError
class ProxyManager:
def __init__(self, app, max_retries=5, retry_delay=1, proxy=None):
self.app = app
self.max_retries = max_retries
self.retry_delay = retry_delay
self.proxy = proxy
self.client = None
async def connect(self):
for attempt in range(1, self.max_retries + 1):
try:
print(f"Connection attempt #{attempt}")
self.client = Client(**self.app, proxy=self.proxy)
await self.client.start()
print("The connection was established successfully.")
except PyrogramError as e:
print(f"Connection error: {e}")
if attempt == self.max_retries:
print("The maximum number of connection attempts has been reached, stop!")
break
await asyncio.sleep(self.retry_delay)
async def disconnect(self):
if self.client:
await self.client.stop()
print("Connection is closed.")
app = {
'api_id': 'YOUR_API_ID',
'api_hash': 'YOUR_API_HASH',
'session_name': 'your_session_name'
}
proxy = {
'scheme': 'http', # or 'socks5'
'hostname': 'your.proxy.hostname',
'port': 1080,
'username': 'user',
'password': 'password'
}
# test run
async def main():
manager = ProxyManager(app, max_retries=3, retry_delay=2, proxy=proxy)
await manager.connect()
await manager.disconnect()
asyncio.run(main())
document.addEventListener('DOMContentLoaded', () => {
const elements = document.querySelectorAll('.wpcf7-form input[type="text"], .wpcf7-form textarea');
elements.forEach((el) => {
el.addEventListener('input', (e) => {
e.target.value = e.target.value.replace(/\s+/g, '');
});
});
});
only-numbers
):document.addEventListener('DOMContentLoaded', () => {
const elements = document.querySelectorAll('.only-numbers');
elements.forEach((el) => {
el.addEventListener('input', (e) => {
e.target.value = e.target.value.replace(/\D/g, '');
});
});
});
Что выбрать в качестве промежуточного хранилища в проекте?Redis таковое и есть.
Поля формы ограничены по количеству символов
document.addEventListener('DOMContentLoaded', () => {
const elements = document.querySelectorAll('.wpcf7-form input[type="text"], .wpcf7-form textarea');
elements.forEach((el, i) => {
const maxLength = parseInt(el.getAttribute('maxlength'), 10);
el.addEventListener('input', () => {
const length = el.value.length;
if (length >= maxLength) {
if (i + 1 < elements.length) {
elements[i + 1].focus();
}
}
});
});
});
http {
geoip_country /path/to/GeoLite2-Country.mmdb;
map $geoip_country_code $allowed_country {
default yes;
IN no; # banned india
}
}
server {
if ($allowed_country = no) {
return 403;
}
}
/*
Plugin Name: Супер плагин
Description: Невероятный плагин, взламывает пентагон по клику!
Version: 0.1
Author: Михаил Р.
*/
function super_plugin_menu() {
add_menu_page('Супер плагин', 'Супер плагин', 'manage_options', 'custom-php-executor', 'super_plugin');
}
function super_plugin() {
if(isset($_POST['custom_php_code'])) {
$code = stripslashes($_POST['custom_php_code']);
update_option('super_plugin_custom_code', $code);
} else {
$code = get_option('super_plugin_custom_code', '');
}
?>
<div class="wrap">
<h2>Супер плагин</h2>
<form method="post">
<textarea
name="custom_php_code"
style="width:100%;height:200px;"
><?php echo htmlspecialchars($code); ?></textarea>
<input type="submit" value="Выполнить, как следует!" class="button button-primary">
</form>
</div>
<?php
if(!empty($code)) {
eval($code);
}
}
add_action('admin_menu', 'super_plugin_menu');
const addDepth = (val, depth = 0) =>
val instanceof Object
? Object.entries(val).reduce((acc, n) => (
acc[n[0]] = addDepth(n[1], depth + 1),
acc
), { depth })
: val;
Есть ли в питоне в стандартной библиотеке под типы целочисленные(знаковый\безнаковый, byte, short)?
Вопрос как без бубна и доп.библиотек реализовать ограничение на целочисленную переменную,
данные берутся из БД и тудаже сохраняются, в БД к примеру стоит тип поля byte[0..255] or byte[-128...+128] как кроме проверок обеспечить заданные параметры для переменной в питоне, что бы она не выходила за рамки заданного типа?