Джанго devserver и пароли

Джанго devserver и пароли

У каждого Django разработчика в активной разработке наверное по 2-3 проекта, и ещё 10-30 "висят" на поддержке. Если при этом по обычному стартовать dev. server:

 

alex@avk ~/dev/deluxe.kharkov.ua $ ./manage.py runserver      20:03:05
Validating models...
0 errors found

Django version 1.3 pre-alpha SVN-13379, using settings 'core.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

то для входа в админку и другие разделы сайта очень быстро произойдёт путаница - даже если браузер будет  запоминать пароли, но толку не будет никакого, так как если пользователь один а паролей много - они начнут перекрывать друг друга.

Чтобы такого не происходило, была сделана вот такая вот придумка, для fabriс написан скрипт, который вычесляет сумму буковок для расположения текущего проекта и использует результат для кормления (или наверное правильно перевести seed как "осеменение") генератора случайных чисел, который выдаёт случайный порт в заданном диапазоне портов.

Вероятность совпадения портов небольшая, и работать стало намного удобнее. Для каждого проекта свой локальный порт.

alex@avk ~/dev/deluxe.kharkov.ua $ fab runserver              20:11:26
[localhost] run: ./manage.py runserver local.dev:4085
Validating models...
0 errors found

Django version 1.3 pre-alpha SVN-13379, using settings 'core.settings'
Development server is running at http://local.dev:4085/
Quit the server with CONTROL-C.

Скрипт:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from fabric.api import local, cd
import random


def runserver(server_address='127.0.0.1'):
    """ Run dev server in unique manner - on a port, which depends on project path.
    This allows to run different projects, on different paths, so stored passwords
    are not mixed up, when running multiple projects on same URL
    (e.g. http://127.0.0.1:8000/)

    If local.dev is present in /etc/hosts, it is used to start server. This is needed
    for local development purposes, so virtual environments (like VirtualBox)
    can access internal IP (usually 10.10.10.x).
    """

    summ = sum([ord(char) for char in PROJECT_ROOT.split('/')[-2]])
    random.seed(summ)
    port = random.randrange(1024,5000)

    if os.path.exists('/etc/hosts'):
        with open('/etc/hosts') as f:
            if f.read().find('local.dev') != -1:
                server_address = 'local.dev'

    with cd(PROJECT_ROOT):
        local('./manage.py runserver %s:%d' % (server_address,
                                               port), capture=False)

Comments

Comments powered by Disqus