Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 7, 2015 10:58:33

Stml
Зарегистрирован: 2014-09-12
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Раздельный доступ к файлу

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

Задача такая:
При переходе на заданный мною url + имя файла, файл открывается, а если его нету создается и парсится html файл содержащий таблицу и выдирается оттуда 1-й столбец и записывается в файл.
Если файл существует и в нем что-то есть, это содержимое выводится на экран.
Можно изменять содержимое и сохранить в файл.

А если пользователей будет несколько, они перезатрут содержимое фала.
Как можно организовать доступ к файлу таким образом, что бы только тот кто открыл мог редактировать и сохранять изменения в файл, а остальные могут только читать получают права только после сохранения\закрытия файла открывшим его.

Вроде, не сильно запутанно написал

urls.py

urlpatterns = patterns('',
    url(r'^look/(.*)$', 'envrnmnt.views.look'),
)

views.py
def look(request, file_name=''):
    temp ={}
    user = None
    if request.method == 'POST':
        if 'fileBody' in request.POST:
            path_to_file = os.path.join('report', file_name)
            #full access to all
            #os.chmod(path_to_file, 0777)
            input_file = open(path_to_file, 'w')
            comment = request.POST.getlist('fileBody')
            goods_name = request.POST.getlist('fileHeader')
            for i in range(0, len(goods_name)):
                temp.update({goods_name[i].encode("utf8") : comment[i].encode("utf8")})
            input_file.write(str(temp))
            input_file.close()
            return render_to_response('look.html', {'file_name': file_name,
                                                        'dict': temp})
    else:
        if not file_name:
            return render_to_response('look.html')
        else:
            _file = open(os.path.join('report', file_name), 'r')#a+
            file_body = _file.read()
            if file_body:
                my_dict = eval(file_body)
                _file.close()
                #может можно привязаться к юзеру?
                #user = request.META['USERNAME']
                #read only to all
                #os.chmod(_file.name, 0444)
                return render_to_response('look.html', {'file_name': file_name,
                                                            'dict': my_dict})
            else:
                url = 'file:' + urllib.pathname2url(r'path to html')
                resp = urlopen(url)
                soup = BeautifulSoup(resp.read(), "html.parser")
                table = soup.find('table')
                rows = table.find_all('tr')
                goods_list = []
                for row in rows:
                    goods_name = row.find_all('td')[0].text
                    if goods_name != 'Summary':
                        if len(goods_name) > 2:
                            goods_list .append(goods_name)
                _file.close()
                return render_to_response('look.html', {'input_file': file_body,
                                                            'file_name': file_name,
                                                            'parsed_files': file_name,
                                                            'goods_list': goods_list})

look.html
<html>
<body>
<div class="container">
    {% if dict %}
    <h2>Goods report - "{{ file_name }}"</h2>
        <form id="form1" action="" method="post">
            {% for key, value in dict.items %}
            <input type="text" class="input_style" name="fileHeader" value="{{ key }}">
            <textarea style="border: none" class="text-block" name="fileBody">{{ value }}</textarea>
            <br><br>
            {% endfor %}
        <br><br>
        <button>Save</button>
        </form>
    {% elif parsed_files %}
    <h2>Goods report - "{{ file_name }}"</h2>
        <form id="form" action="" method="post">
            {% for item in goods_list %}
            <input type="text" class="input_style" name="fileHeader" value="{{ item }}">
            <textarea style="border: none" class="text-block" name="fileBody">{{ input_file }}</textarea>
            <br><br>
            {% endfor %}
        <br><br>
        <button>Save</button>
        </form>
    {% else %}
    <h2>Goods report</h2>
            <h3> Goods</h3>
            <textarea style="border: none" class="text-block" name="fileBody">{{ input_file }}</textarea>
        <br><br>
    {% endif %}
</div>
</body>
</html>

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version