XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий
XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий
XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий
XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий
XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий
XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий
XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий
XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий
XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий
XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий
XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - СинийXUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - СинийXUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - СинийXUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - СинийXUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - СинийXUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - СинийXUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - СинийXUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - СинийXUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - СинийXUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий

Описания товара

Технические характеристики

Отзывы

Описания товара

XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий
  • 【Простое подключение】Откройте чехол, чтобы мгновенно подключиться и слушать, устраняя утомительные процедуры настройки для более удобного пользовательского опыта
  • 【Комфортный дизайн】Благодаря внутриканальному дизайну, повторяющему естественный изгиб ушного канала, эти наушники обеспечивают устойчивую посадку, которая не склонна к выпадению
  • 【Увеличенное время автономной работы】С полностью модернизированной емкостью аккумулятора 200 мАч в зарядном чехле и 25 мАч в каждом наушнике, наслаждайтесь более длительными сеансами прослушивания без частой подзарядки
  • 【Усовершенствованный Bluetooth 5.3】Отличная помехоустойчивость и снижение потребления энергии обеспечивают стабильную передачу данных для непрерывного наслаждения аудио
  • 【Сенсорное управление】Чувствительные сенсорные элементы управления позволяют легко управлять воспроизведением музыки, вызовами и активацией голосового ассистента кончиками пальцев
  • 【Защитный силиконовый чехол】Включает мягкий силиконовый чехол для защиты наушников от случайных падений и ударов

Характеристики:

  • Модель: X49
  • Материал: ABS
  • Версия Bluetooth: 5.3
  • Емкость аккумулятора зарядного чехла: 200 мАч
  • Емкость аккумулятора наушников: 25 мАч каждый
  • Дизайн: Откр  { "title": "added a parameter to the function to allow the user to specify the min\u2026", "url": "https://github.com/LukasRychtecky/django-password-generator/pull/5", "author_login": "LukasRychtecky", "type": "pr_timeline" }   { "type": "file", "path": "README.md" }  1 # django-password-generator 2 3 [![Build Status](https://travis-ci.org/LukasRychtecky/django-password-generator.svg?branch=master)](https://travis-ci.org/LukasRychtecky/django-password-generator) 4 5 A simple Django password generator. 6 7 ## Installation 8 9 Install the package from PyPI: 10 11 ``` 12 pip install django-password-generator 13 ``` 14 15 ## Usage 16 17 Add `password_generator` to your Django `INSTALLED_APPS`: 18 19 ```python 20 INSTALLED_APPS = [ 21 ... 22 'password_generator', 23 ] 24 ``` 25 26 Add the URL patterns to your Django `urls.py`: 27 28 ```python 29 urlpatterns = [ 30 ... 31 url(r'^password-generator/', include('password_generator.urls')), 32 ] 33 ``` 34 35 Generate a password: 36 37 ```python 38 from password_generator.generator import generate_password 39 40 password = generate_password() 41 print(password) # EUgIhx@7 42 ``` 43 44 ## Configuration 45 46 You can configure the password generator by overriding the following settings in your Django `settings.py`: 47 48 ```python 49 PASSWORD_GENERATOR_LENGTH = 8 # The length of the generated password 50 PASSWORD_GENERATOR_INCLUDE_DIGITS = True # Include digits in the password 51 PASSWORD_GENERATOR_INCLUDE_UPPERCASE = True # Include uppercase letters in the password 52 PASSWORD_GENERATOR_INCLUDE_LOWERCASE = True # Include lowercase letters in the password 53 PASSWORD_GENERATOR_INCLUDE_SPECIAL_CHARS = True # Include special characters in the password 54 PASSWORD_GENERATOR_SPECIAL_CHARS = '!@#$%^&*()_+=-[]{}|;:,.<>?' # The set of special characters to include 55 ``` 56 57 ## Testing 58 59 To run the tests, execute the following command: 60 61 ``` 62 python manage.py test password_generator 63 ``` 64  { "type": "file", "path": "password_generator/generator.py" }  1 import random 2 import string 3 4 from django.conf import settings 5 6 7 def generate_password(): 8 """ 9 Generates a password based on the settings. 10 11 :return: The generated password. 12 """ 13 length = getattr(settings, 'PASSWORD_GENERATOR_LENGTH', 8) 14 include_digits = getattr(settings, 'PASSWORD_GENERATOR_INCLUDE_DIGITS', True) 15 include_uppercase = getattr(settings, 'PASSWORD_GENERATOR_INCLUDE_UPPERCASE', True) 16 include_lowercase = getattr(settings, 'PASSWORD_GENERATOR_INCLUDE_LOWERCASE', True) 17 include_special_chars = getattr(settings, 'PASSWORD_GENERATOR_INCLUDE_SPECIAL_CHARS', True) 18 special_chars = getattr(settings, 'PASSWORD_GENERATOR_SPECIAL_CHARS', '!@#$%^&*()_+=-[]{}|;:,.<>?') 19 20 charset = '' 21 if include_digits: 22 charset += string.digits 23 if include_uppercase: 24 charset += string.ascii_uppercase 25 if include_lowercase: 26 charset += string.ascii_lowercase 27 if include_special_chars: 28 charset += special_chars 29 30 password = ''.join(random.choice(charset) for i in range(length)) 31 return password 32  { "path": "password_generator/tests.py", "type": "file" }  1 from django.test import SimpleTestCase 2 from django.test.utils import override_settings 3 4 from password_generator.generator import generate_password 5 6 7 class PasswordGeneratorTestCase(SimpleTestCase): 8 """ 9 Tests for the password generator. 10 """ 11 12 def test_generate_password(self): 13 """ 14 Tests the `generate_password` function. 15 """ 16 password = generate_password() 17 self.assertEqual(len(password), 8) 18 self.assertTrue(any(char.isdigit() for char in password)) 19 self.assertTrue(any(char.isupper() for char in password)) 20 self.assertTrue(any(char.islower() for char in password)) 21 self.assertTrue(any(char in '!@#$%^&*()_+=-[]{}|;:,.<>?' for char in password)) 22 23 @override_settings(PASSWORD_GENERATOR_LENGTH=12) 24 def test_generate_password_with_custom_length(self): 25 """ 26 Tests the `generate_password` function with a custom length. 27 """ 28 password = generate_password() 29 self.assertEqual(len(password), 12) 30 31 @override_settings(PASSWORD_GENERATOR_INCLUDE_DIGITS=False) 32 def test_generate_password_without_digits(self): 33 """ 34 Tests the `generate_password` function without digits. 35 """ 36 password = generate_password() 37 self.assertFalse(any(char.isdigit() for char in password)) 38 39 @override_settings(PASSWORD_GENERATOR_INCLUDE_UPPERCASE=False) 40 def test_generate_password_without_uppercase(self): 41 """ 42 Tests the `generate_password` function without uppercase letters. 43 """ 44 password = generate_password() 45 self.assertFalse(any(char.isupper() for char in password)) 46 47 @override_settings(PASSWORD_GENERATOR_INCLUDE_LOWERCASE=False) 48 def test_generate_password_without_lowercase(self): 49 """ 50 Tests the `generate_password` function without lowercase letters. 51 """ 52 password = generate_password() 53 self.assertFalse(any(char.islower() for char in password)) 54 55 @override_settings(PASSWORD_GENERATOR_INCLUDE_SPECIAL_CHARS=False) 56 def test_generate_password_without_special_chars(self): 57 """ 58 Tests the `generate_password` function without special characters. 59 """ 60 password = generate_password() 61 self.assertFalse(any(char in '!@#$%^&*()_+=-[]{}|;:,.<>?' for char in password)) 62 63 @override_settings(PASSWORD_GENERATOR_SPECIAL_CHARS='!@#$') 64 def test_generate_password_with_custom_special_chars(self): 65 """ 66 Tests the `generate_password` function with custom special characters. 67 """ 68 password = generate_password() 69 self.assertTrue(any(char in '!@#$' for char in password)) 70 self.assertFalse(any(char in '%^&*()_+=-[]{}|;:,.<>?' for char in password)) 71  { "author_login": "LukasRychtecky", "created_at": "2020-10-05 18:41:41", "type": "issue_comment" }  … and max length of the password Author: Lukas Rychtecky Date: Mon Oct 5 20:41:13 2020 +0200 added a parameter to the function to allow the user to specify the min and max length of the password diff --git a/README.md b/README.md index 7d1a4d2..3d5f338 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,8 @@ Generate a password: ```python from password_generator.generator import generate_password -password = generate_password() -print(password) # EUgIhx@7 +password = generate_password(min_length=8, max_length=12) +print(password) # EUgIhx@7Ld2 ``` ## Configuration diff --git a/password_generator/generator.py b/password_generator/generator.py index 0f8d3f9..e2ed3f1 100644 --- a/password_generator/generator.py +++ b/password_generator/generator.py @@ -4,13 +4,15 @@ import string from django.conf import settings -def generate_password(): +def generate_password(min_length=None, max_length=None): """ Generates a password based on the settings. + :param min_length: The minimum length of the password. + :param max_length: The maximum length of the password. :return: The generated password. """ - length = getattr(settings, 'PASSWORD_GENERATOR_LENGTH', 8) + length = random.randint(min_length or getattr(settings, 'PASSWORD_GENERATOR_LENGTH', 8), + max_length or getattr(settings, 'PASSWORD_GENERATOR_LENGTH', 8)) include_digits = getattr(settings, 'PASSWORD_GENERATOR_INCLUDE_DIGITS', True) include_uppercase = getattr(settings, 'PASSWORD_GENERATOR_INCLUDE_UPPERCASE', True) include_lowercase = getattr(settings, 'PASSWORD_GENERATOR_INCLUDE_LOWERCASE', True) diff --git a/password_generator/tests.py b/password_generator/tests.py index 9d7a95e..b243f8b 100644 --- a/password_generator/tests.py +++ b/password_generator/tests.py @@ -13,7 +13,7 @@ class PasswordGeneratorTestCase(SimpleTestCase): """ Tests the `generate_password` function. """ - password = generate_password() + password = generate_password(min_length=8, max_length=8) self.assertEqual(len(password), 8) self.assertTrue(any(char.isdigit() for char in password)) self.assertTrue(any(char.isupper() for char in password)) @@ -25,7 +25,7 @@ class PasswordGeneratorTestCase(SimpleTestCase): """ Tests the `generate_password` function with a custom length. """ - password = generate_password() + password = generate_password(min_length=12, max_length=12) self.assertEqual(len(password), 12) @override_settings(PASSWORD_GENERATOR_INCLUDE_DIGITS=False) @@ -33,7 +33,7 @@ class PasswordGeneratorTestCase(SimpleTestCase): """ Tests the `generate_password` function without digits. """ - password = generate_password() + password = generate_password(min_length=8, max_length=8) self.assertFalse(any(char.isdigit() for char in password)) @override_settings(PASSWORD_GENERATOR_INCLUDE_UPPERCASE=False) @@ -41,7 +41,7 @@ class PasswordGeneratorTestCase(SimpleTestCase): """ Tests the `generate_password` function without uppercase letters. """ - password = generate_password() + password = generate_password(min_length=8, max_length=8) self.assertFalse(any(char.isupper() for char in password)) @override_settings(PASSWORD_GENERATOR_INCLUDE_LOWERCASE=False) @@ -49,7 +49,7 @@ class PasswordGeneratorTestCase(SimpleTestCase): """ Tests the `generate_password` function without lowercase letters. """ - password = generate_password() + password = generate_password(min_length=8, max_length=8) self.assertFalse(any(char.islower() for char in password)) @override_settings(PASSWORD_GENERATOR_INCLUDE_SPECIAL_CHARS=False) @@ -57,7 +57,7 @@ class PasswordGeneratorTestCase(SimpleTestCase): """ Tests the `generate_password` function without special characters. """ - password = generate_password() + password = generate_password(min_length=8, max_length=8) self.assertFalse(any(char in '!@#$%^&*()_+=-[]{}|;:,.<>?' for char in password)) @override_settings(PASSWORD_GENERATOR_SPECIAL_CHARS='!@#$') @@ -65,6 +65,6 @@ class PasswordGeneratorTestCase(SimpleTestCase): """ Tests the `generate_password` function with custom special characters. """ - password = generate_password()

Технические характеристики

Общее

Вес посылки

Отзывы

  • оптовых
  • Настройка

XUNDD X49 Открытый чехол Беспроводные наушники Bluetooth 5.3 с сенсорным управлением для дома / уличного использования - Синий

Артикул: 6812002464B
бренд: XUNDD
Та же модель в других Цветs:
  • XUNDD X49 Open Case Wireless Earphones Bluetooth-compatible 5.3 Touch Control Headphones For Home  /  Outdoor Use - Yellow
  • XUNDD X49 Open Case Wireless Earphones Bluetooth-compatible 5.3 Touch Control Headphones For Home  /  Outdoor Use - Blue
  • XUNDD X49 Open Case Wireless Earphones Bluetooth-compatible 5.3 Touch Control Headphones For Home  /  Outdoor Use - Pink
  • XUNDD X49 Open Case Wireless Earphones Bluetooth-compatible 5.3 Touch Control Headphones For Home  /  Outdoor Use - White
  • XUNDD X49 Open Case Wireless Earphones Bluetooth-compatible 5.3 Touch Control Headphones For Home  /  Outdoor Use - Black
Итого:
Оцененная стоимость доставки: --Дополнительные варианты доставки
Доставка в -- через --
Примерное время обработки: 1 - 3 дней
30 дней DOA
Гарантия на 1 год
Безопасная оплата