Commit c2812c8e authored by Vasyl Bodnaruk's avatar Vasyl Bodnaruk

add functional for edit news

parent 9124778e
from django.conf.urls import url from django.conf.urls import url
from .views import JobListView, NewJobCreateView from .views import JobListView, NewJobCreateView, EditJobView
urlpatterns = [ urlpatterns = [
url('^new$', NewJobCreateView.as_view(), name='new_job'), url(r'^new$', NewJobCreateView.as_view(), name='new_job'),
url('^$', JobListView.as_view(), name='job_list'), url(r'^$', JobListView.as_view(), name='job_list'),
url(r'^(?P<id>[0-9]+)$', EditJobView.as_view(), name='edit_job')
] ]
\ No newline at end of file
from django.shortcuts import render, HttpResponseRedirect, reverse, HttpResponse from django.shortcuts import render, HttpResponseRedirect, reverse, HttpResponse
from django.http import JsonResponse from django.http import JsonResponse
from django.views.generic import ListView, CreateView from django.views.generic import ListView, CreateView, UpdateView
from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.decorators import login_required, permission_required
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
...@@ -8,6 +8,7 @@ from .models import Spider, Job ...@@ -8,6 +8,7 @@ from .models import Spider, Job
from .service import Service from .service import Service
@method_decorator(login_required, name='post')
class JobListView(ListView): class JobListView(ListView):
template_name = 'list_jobs.html' template_name = 'list_jobs.html'
model = Job model = Job
...@@ -27,7 +28,6 @@ class JobListView(ListView): ...@@ -27,7 +28,6 @@ class JobListView(ListView):
} }
return render(request, self.template_name, {'jobs': jobs}) return render(request, self.template_name, {'jobs': jobs})
@method_decorator(login_required)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
if request.is_ajax(): if request.is_ajax():
action = request.POST.get('action') action = request.POST.get('action')
...@@ -53,6 +53,8 @@ class JobListView(ListView): ...@@ -53,6 +53,8 @@ class JobListView(ListView):
if action == 'log': if action == 'log':
log = self.service.get_log(job_id) log = self.service.get_log(job_id)
return HttpResponse(log, content_type='text/plain') return HttpResponse(log, content_type='text/plain')
if action == 'edit':
return HttpResponseRedirect(reverse('edit_job', kwargs={'id': job_id}))
@method_decorator(login_required, name='dispatch') @method_decorator(login_required, name='dispatch')
...@@ -70,3 +72,21 @@ class NewJobCreateView(CreateView): ...@@ -70,3 +72,21 @@ class NewJobCreateView(CreateView):
Job.objects.create(name=name, spider=spider, query=query) Job.objects.create(name=name, spider=spider, query=query)
return HttpResponseRedirect(reverse('job_list')) return HttpResponseRedirect(reverse('job_list'))
@method_decorator(login_required, name='dispatch')
class EditJobView(UpdateView):
template_name = 'edit_job.html'
def get(self, request, *args, **kwargs):
job = Job.objects.get(pk=kwargs.get('id'))
spiders = Spider.objects.all().exclude(sp_name=job.spider.sp_name)
return render(request, self.template_name, {'job': job, 'spiders': spiders})
def post(self, request, *args, **kwargs):
name = request.POST.get('name')
spider = Spider.objects.get(pk=request.POST.get('spider'))
query = request.POST.get('query')
job = Job.objects.filter(pk=request.POST.get('job'))
job.update(name=name, spider=spider, query=query)
return HttpResponseRedirect(reverse('edit_job', kwargs={'id': request.POST.get('job')}))
{% extends 'base.html' %}
{% block content %}
<main class="pt-2 pb-5">
<div class="container">
<form class="form" method="post">
{% csrf_token %}
<section class="mb-5">
<h5 class="offset-1 display-5 mb-2">Edit job</h5>
<!-- Name -->
<div class="form-group row">
<label for="name" class="offset-1 col-2 col-form-label">Name</label>
<div class="col-6">
<input class="form-control" type="text" id="name" name="name" value="{{ job.name }}">
<input type="hidden" name="job" value="{{ job.id }}">
</div>
</div>
<div class="form-group row">
<label for="spider" class="offset-1 col-2 col-form-label">Spider</label>
<div class="col-6">
<select name="spider" id="spider" class="form-control">
<option value="{{ job.spider.id }}">{{ job.spider.name }}</option>
{% for i in spiders %}
<option value="{{ i.id }}">{{ i.name }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-group row">
<label for="name" class="offset-1 col-2 col-form-label">SQL query</label>
<div class="col-6">
<input class="form-control" type="text" placeholder="Input query" id="query" name="query" value="{{ job.query }}">
</div>
</div>
<div class="form-group row">
<div class="offset-5 col-2">
<a class="form-control btn btn-danger" href="/job/">Cancel</a>
</div>
<div class="col-2 pull-right">
<button type="submit" class="form-control btn btn-primary">Update</button>
</div>
</div>
</section>
</form>
</div>
</main>
{% endblock %}
\ No newline at end of file
...@@ -50,11 +50,9 @@ ...@@ -50,11 +50,9 @@
<button class="btn btn-sm btn-danger" data-action="delete" data-loading-text="Deleting..." <button class="btn btn-sm btn-danger" data-action="delete" data-loading-text="Deleting..."
data-text="Delete">Delete data-text="Delete">Delete
</button> </button>
<button class="btn btn-sm btn-secondary" <a class="btn btn-sm btn-secondary" href="{% url 'edit_job' i.id %}" >
data-loading-text="<i class='fa fa-cog fa-spin' aria-hidden='true'></i>"
data-action="edit" data-text="<i class='fa fa-cog' aria-hidden='true'></i>">
<i class="fa fa-cog" aria-hidden="true"></i> <i class="fa fa-cog" aria-hidden="true"></i>
</button> </a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
......
class WebappDatabaseRouter:
def db_for_read(self, model, **hints):
if model._meta.app_label == 'webapp':
return 'esi'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'webapp':
return 'esi'
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'webapp' or \
obj2._meta.app_label == 'webapp':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'webapp':
return db == 'esi'
return None
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment