views.py
Работа с административной панелью Django
Для входа в систему администрирования введите в адресной строке https://albom-form.se.mrsk-urala.local/admin/ и введите выданные логин и пароль
Панель администратора предназначена для просмотра, редактирования инфрмации в базах данных, создания новых пользователей, новых документов, отделов. Для настройки панели администратора необходимо открыть файл admin.py и ввести нужные части программного кода, это позволяет создать наиболее удобный интерфейс для программиста.
Для добавления модели в группу созданного приложения необходимо открыть файл models.py, объявить название модели и описание.
Для того чтобы создать новую страницу необходимо объявить операцию в файле views.py, также создать html документ и прописать адрес данной страницы в файл urls.py
Инструкция пользователя
Для входа необходимо в адресной строке браузера написать адрес https://albom-form.se.mrsk-urala.local/, после чего перед вами откроется страница авторизации пользователя.
Для входа в ресурс необходимо узнать свой логин и пароль у администратора, после чего ввести информацию в соответствующие поля и нажать кнопку «Войти».
После авторизации откроется главная страница ресурса где по центру располагаются существующие документы и основная информация о них.
Для нахождения нужного вам документа есть функция «поиск по ключевому слову», которая располагается в верхнем левом углу. Необходимо ввести название, отдел, или же форму записи документа и нажать кнопку «Поиск».
Ниже располагается «фильтр по записям», нужно выбрать критерии и нажать кнопку «Фильтр», после чего в таблице будут отображаться соответствующие документы.
В правой верхней части страницы расположена кнопка «новая запись», которая открывает пустой шаблон для заполнения.
Чтобы удалить документ нужно нажать на иконку корзины нужного документа. Эта функция работает только если у вас есть необходимые на это права, обычный рядовой сотрудник не может удалить документ.
Для редактирования нужно нажать на крайнюю иконку слева соответствующего документа, откроется страница со всей существующей информацией и прикрепленным файлом. Функцию редактирования может использовать только тот сотрудник, у которого есть на эта определенные права.
models.pydjango.db import modelsdjango.contrib.auth.models import Userdjango.core.urlresolvers import reversedjango.utils import timezone
# Create your models here.Otdel(models.Model):= models.CharField(max_length=12, unique=True)= models.CharField(max_length=100)= models.TextField()__str__(self):str(self.name)Res(models.Model):= models.CharField(max_length=10, unique=True)= models.CharField(max_length=150)__str__(self):str(self.name)TypeDoc(models.Model):= models.CharField(max_length=30, unique=True)= models.CharField(max_length=100)= models.TextField()__str__(self):str(self.name)PublishedManager(models.Manager):get_queryset(self):super(PublishedManager, self).get_queryset().filter(status='published')Albom(models.Model):= (
(1, "Бумажное"),
(2, "Электронное"),
(3, "Комбинированное")
)_podrazd = models.ForeignKey(Otdel, verbose_name = "Подразделение")_form = models.CharField(max_length=100, verbose_name = "Идент. формы")_typedoc = models.ForeignKey(TypeDoc, verbose_name = "Тип документа")= models.SlugField(max_length=250, unique_for_date='created_at')= models.ForeignKey(User, related_name='+', verbose_name = "Автор")= models.CharField(max_length=254, verbose_name = "Имя формы")_doc = models.CharField(max_length=50, verbose_name = "№ документа")_doc = models.DateField(default=timezone.now, verbose_name = "Дата документа")_user = models.CharField(max_length=100, blank=True, verbose_name = "ответсвенный")_khraneniya = models.IntegerField(choices=CATEGORIES, default=1, verbose_name = "Вид хранения")_doc_otm = models.CharField(max_length=50, blank=True, verbose_name = "№ документа отмены")_doc_otm = models.DateField(blank=True, null=True, verbose_name = "Дата документы отмены")= models.TextField(max_length=254, blank=True, verbose_name = "Примечание")_file = models.FileField(upload_to='uploads/%Y/%m/%d/', verbose_name=u'Прикрепить документ', max_length = 1000, blank=True)= models.BooleanField(verbose_name = "Действующая")_at = models.DateTimeField(auto_now_add = True)_at = models.DateTimeField(auto_now = True)= models.Manager() # The default manager.= PublishedManager() # The Dahl-specific manager.Meta:= ('-id_form',)get_formatted_datetime(self):str(self.created_at.day) + "." + str(self.created_at.month) + "." + str(self.created_at.year) + " " + str(self.created_at.hour) + ":" + str(self.created_at.minute) + ":" + str(self.created_at.second)_formatted_datetime.short_description = "Опубликовано"get_absolute_url(self):reverse('albom-update', kwargs={'pk': self.pk}).pydjango.http import HttpResponsedjango.shortcuts import render, render_to_response, get_object_or_404, redirectdjango.core.paginator import Paginator, EmptyPage, PageNotAnIntegerdjango.views.generic.base import ContextMixin, TemplateViewdjango.views.generic.edit import CreateView, UpdateView, DeleteView, ProcessFormViewdjango.core.urlresolvers import reverse_lazy, reversedjango.contrib.messages.views import SuccessMessageMixintaggit.models import Tagjson.models import Otdel.models import TypeDoc.models import Albom.models import Res
# Create your views here.index(request, tag_slug=None):= Otdel.objects.all().order_by("name")= TypeDoc.objects.all().order_by("name")_forms = Albom.objects.all()= Res.objects.all().order_by("name")= Nonetag_slug:= get_object_or_404(Tag, slug=tag_slug)_list = albom_forms.filter(tags__in=[tag])_albom_form = '{"iTotalRecord":'+str(albom_forms.count())+', "iTotalDisplayRecords": 10, "sEcho":10, "aaData": []}'= Paginator(albom_forms, 20, orphans = 1):= request.GET.get('page')KeyError:= 1:= paginator.page(page)PageNotAnInteger:
# If page is not an integer, deliver first page.= paginator.page(1)EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.= paginator.page(paginator.num_pages)= {
'otdels': otdels,
'typedocs': typedocs,
'albomforms': albomforms,
'ress': ress,
'json_albom_form': json_albom_form,
'tag': tag,
'pn': page,
}
#print(request.user.get_all_permissions())render(request, 'index.html', context)AlbomListMixin(ContextMixin):get_context_data(self, **kwargs):= super(AlbomListMixin, self).get_context_data(**kwargs)contextAlbomEditMixin(AlbomListMixin):get_context_data(self, **kwargs):= super(AlbomEditMixin, self).get_context_data(**kwargs):["pn"] = self.request.GET["page"]KeyError:["pn"] = "1"contextAlbomEditView(ProcessFormView):post(self, request, *args, **kwargs)::= request.GET["page"]KeyError:= "1".success_url = self.success_url + "?page=" + pnsuper(AlbomEditView, self).post(request, *args, **kwargs)AlbomCreate(CreateView, AlbomEditMixin):= Albom_name = "albomform_add.html"= ['id_podrazd', 'id_form', 'id_typedoc', 'name', 'n_doc', 'date_doc', 'otv_user', 'vid_khraneniya',
'n_doc_otm', 'date_doc_otm', 'description', 'path_file', 'active']get(self, request, *args, **kwargs):request.user.is_authenticated():request.user.has_perm("albom_form.add_albom")::_stock = request.session["in_stock"]:_stock = True:redirect("/login/?next=" + request.path):redirect("/login/?next=" + request.path)super(AlbomCreate, self).get(request, *args, **kwargs)post(self, request, *args, **kwargs):super(AlbomCreate, self).post(request, *args, **kwargs)get_context_data(self, **kwargs):= super(AlbomCreate, self).get_context_data(**kwargs)contextAlbomUpdate(SuccessMessageMixin, UpdateView, AlbomEditMixin, AlbomEditView):_name = "albomform.html"= Albom= ['id_podrazd', 'id_form', 'id_typedoc', 'name', 'n_doc', 'date_doc', 'otv_user', 'vid_khraneniya',
'n_doc_otm', 'date_doc_otm', 'description', 'path_file', 'active']_url_kwarg = "pk"get(self, request, *args, **kwargs):request.user.is_authenticated():request.user.has_perm("albom_form.change_albom")::_stock = request.session["in_stock"]:_stock = True:redirect("/login/?next=" + request.path):redirect("/login/?next=" + request.path)super(AlbomUpdate, self).get(request, *args, **kwargs)post(self, request, *args, **kwargs):.success_url = reverse("index")super(AlbomUpdate, self).post(request, *args, **kwargs)_message = "Форма успешно обновлена в альбоме форм"
class AlbomDelete(DeleteView):= Albom_url = reverse_lazy('index')AboutView(TemplateView):_name = "about.html"get_search(request):'q' in request.GET and request.GET['q']:= request.GET['q']= Albom.objects.filter(name__icontains=q)render_to_response('search.html'),{'forms' : forms, 'query' : q}:.pydjango.contrib import admin.models import Otdel.models import Res.models import Albom.models import TypeDoc
# Register your models here.OtdelAdmin(admin.ModelAdmin):_display = ("name", "fullname")ResAdmin(admin.ModelAdmin):_display = ("name", "fullname")TypeDocAdmin(admin.ModelAdmin):_display = ("name", "fullname")AlbomAdmin(admin.ModelAdmin):_display = ("get_formatted_datetime", "id_form", "name", "otv_user", "author")_filter = ("id_podrazd", "id_typedoc", "author")_fields = ("id_form", "name")_hierarchy = ("date_doc")= ['id_form', 'name'].site.register(Otdel, OtdelAdmin).site.register(Res, ResAdmin).site.register(TypeDoc, TypeDocAdmin).site.register(Albom, AlbomAdmin).pydjango.conf.urls import urldjango.views.generic.base import TemplateViewalbomform.apps.albom_form import viewsdjango.conf import settingsdjango.conf.urls.static import staticalbomform.apps.albom_form.views import AlbomCreate, AlbomUpdate, AlbomDeletedjango.contrib.auth.decorators import login_required= [(r'^$', login_required(views.index), name="index"),(r'albom/add/$', login_required(AlbomCreate.as_view()), name='albom-add'),(r'albom/(?P<pk>\d+)/$', login_required(AlbomUpdate.as_view()), name='albom-update'),(r'albom/(?P<pk>\d+)/delete/$', login_required(AlbomDelete.as_view()), name='albom-delete'),(r'about/$', login_required(TemplateView.as_view(template_name="about.html")), name="about"),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Заключение
По дипломному заданию необходимо было разработать сетевой ресурс для предприятия ОАО «МРСК Урала»
Сетевой ресурс предназначен для облегчения работы персонала. С его помощью сотрудники предприятия, не затрачивая много времени могут найти нужный им документ, отредактировать или удалить его. Также присутствует функция создания нового документа, для этого заранее созданы и размещены шаблоны для заполнения.
Список использованных источников
1.Django: практика создания сайтов на Python (Дронов В.А.)
2.Изучаем Python: программирование игр, визуализация данных, веб-приложения (Эрик Мэтиз)
.Простой Python Современный стиль программирования (Билл Любанович)
.Python 3 &PyQt: Разработка приложений (Николай Прохоренок)
.Язык программирования Python (Сузи Роман Авриевич)