Нужна Ваши помощь, а то я совсем голову сломал.
В 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>