Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
E
esi-table-data
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
esi-data-scrapping
esi-table-data
Commits
c2812c8e
Commit
c2812c8e
authored
Jun 28, 2017
by
Vasyl Bodnaruk
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add functional for edit news
parent
9124778e
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
79 additions
and
32 deletions
+79
-32
urls.py
esi/scraper/urls.py
+4
-3
views.py
esi/scraper/views.py
+22
-2
edit_job.html
esi/templates/edit_job.html
+51
-0
list_jobs.html
esi/templates/list_jobs.html
+2
-4
router.py
esi/webapp/router.py
+0
-23
No files found.
esi/scraper/urls.py
View file @
c2812c8e
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
esi/scraper/views.py
View file @
c2812c8e
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'
)}))
esi/templates/edit_job.html
0 → 100755
View file @
c2812c8e
{% 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
esi/templates/list_jobs.html
View file @
c2812c8e
...
@@ -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 %}
...
...
esi/webapp/router.py
deleted
100755 → 0
View file @
9124778e
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment