Implement managing hooks
This commit is contained in:
parent
83808dfa52
commit
7118af5d3c
|
@ -44,7 +44,10 @@ INSTALLED_APPS = [
|
||||||
# "django_tables2_bulma_template",
|
# "django_tables2_bulma_template",
|
||||||
]
|
]
|
||||||
CRISPY_TEMPLATE_PACK = "bulma"
|
CRISPY_TEMPLATE_PACK = "bulma"
|
||||||
CRISPY_ALLOWED_TEMPLATE_PACKS = ("bulma",)
|
CRISPY_ALLOWED_TEMPLATE_PACKS = (
|
||||||
|
"uni_form",
|
||||||
|
"bulma",
|
||||||
|
)
|
||||||
DJANGO_TABLES2_TEMPLATE = "django-tables2/bulma.html"
|
DJANGO_TABLES2_TEMPLATE = "django-tables2/bulma.html"
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|
|
@ -41,8 +41,7 @@ urlpatterns = [
|
||||||
path("admin/", admin.site.urls),
|
path("admin/", admin.site.urls),
|
||||||
path("accounts/", include("django.contrib.auth.urls")),
|
path("accounts/", include("django.contrib.auth.urls")),
|
||||||
path("accounts/signup/", base.Signup.as_view(), name="signup"),
|
path("accounts/signup/", base.Signup.as_view(), name="signup"),
|
||||||
# path("demo/modal/", demo.DemoModal.as_view(), name="modal"),
|
|
||||||
# path("demo/widget/", demo.DemoWidget.as_view(), name="widget"),
|
|
||||||
# path("demo/window/", demo.DemoWindow.as_view(), name="window"),
|
|
||||||
path("hooks/<str:type>/", hooks.Hooks.as_view(), name="hooks"),
|
path("hooks/<str:type>/", hooks.Hooks.as_view(), name="hooks"),
|
||||||
|
path("hooks/modal/add/", hooks.AddHook.as_view(), name="add-hook"),
|
||||||
|
path("hooks/modal/add/<str:name>/", hooks.AddHook.as_view(), name="add-hook"),
|
||||||
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth.forms import UserCreationForm
|
from django.contrib.auth.forms import UserCreationForm
|
||||||
|
from django.forms import ModelForm
|
||||||
|
|
||||||
from .models import User
|
from .models import Hook, User
|
||||||
|
|
||||||
# Create your forms here.
|
# Create your forms here.
|
||||||
|
|
||||||
|
@ -32,3 +33,12 @@ class CustomUserCreationForm(UserCreationForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
|
class HookForm(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Hook
|
||||||
|
fields = (
|
||||||
|
"name",
|
||||||
|
"hook",
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Generated by Django 4.1.2 on 2022-10-14 23:15
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('core', '0002_session_session'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Hook',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(blank=True, max_length=1024, null=True)),
|
||||||
|
('hook', models.CharField(max_length=255)),
|
||||||
|
('received', models.IntegerField(default=0)),
|
||||||
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
|
@ -75,8 +75,9 @@ class Session(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class Hook(models.Model):
|
class Hook(models.Model):
|
||||||
user = user = models.ForeignKey(User, on_delete=models.CASCADE)
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
hook = models.CharField(max_length=255, null=True, blank=True)
|
name = models.CharField(max_length=1024, null=True, blank=True)
|
||||||
|
hook = models.CharField(max_length=255)
|
||||||
received = models.IntegerField(default=0)
|
received = models.IntegerField(default=0)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
{% extends 'wm/modal.html' %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
|
||||||
|
{% load crispy_forms_bulma_field %}
|
||||||
|
{% block modal_content %}
|
||||||
|
<form
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-put="{% url 'add-hook' %}"
|
||||||
|
hx-target="#hooks-table"
|
||||||
|
hx-swap="outerHTML">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form|crispy }}
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="button is-light modal-close-button">
|
||||||
|
Cancel
|
||||||
|
</button>
|
||||||
|
<button type="submit" class="button is-info modal-close-button">Submit</button>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
{% include 'partials/notify.html' %}
|
||||||
|
|
||||||
|
<table class="table is-fullwidth is-hoverable" id="hooks-table">
|
||||||
|
<thead>
|
||||||
|
<th>user</th>
|
||||||
|
<th>hook</th>
|
||||||
|
<th>received hooks</th>
|
||||||
|
<th>actions</th>
|
||||||
|
</thead>
|
||||||
|
{% for item in hooks %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ item.user }}</td>
|
||||||
|
<td>{{ item.hook }}</td>
|
||||||
|
<td>{{ item.received }}</td>
|
||||||
|
<td>
|
||||||
|
<button
|
||||||
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
|
hx-get="#"
|
||||||
|
hx-trigger="click"
|
||||||
|
hx-target="#modals-here"
|
||||||
|
class="button is-info">
|
||||||
|
<span class="icon-text">
|
||||||
|
<span class="icon">
|
||||||
|
<i class="fa-solid fa-pencil"></i>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</table>
|
|
@ -1,7 +1,7 @@
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<button
|
<button
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||||
hx-get="#"
|
hx-get="{% url 'add-hook' %}"
|
||||||
hx-trigger="click"
|
hx-trigger="click"
|
||||||
hx-target="#modals-here"
|
hx-target="#modals-here"
|
||||||
class="button is-info">
|
class="button is-info">
|
||||||
|
@ -15,33 +15,6 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% include 'partials/notify.html' %}
|
{% include 'partials/notify.html' %}
|
||||||
<table class="table is-fullwidth is-hoverable">
|
{% include 'partials/hook-list.html' %}
|
||||||
<thead>
|
|
||||||
<th>user</th>
|
|
||||||
<th>hook</th>
|
|
||||||
<th>received hooks</th>
|
|
||||||
<th>actions</th>
|
|
||||||
</thead>
|
|
||||||
{% for item in hooks %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ item.user }}</td>
|
|
||||||
<td>{{ item.hook }}</td>
|
|
||||||
<td>{{ item.received }}</td>
|
|
||||||
<td>
|
|
||||||
<button
|
|
||||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
|
||||||
hx-get="#"
|
|
||||||
hx-trigger="click"
|
|
||||||
hx-target="#modals-here"
|
|
||||||
class="button is-info">
|
|
||||||
<span class="icon-text">
|
|
||||||
<span class="icon">
|
|
||||||
<i class="fa-solid fa-pencil"></i>
|
|
||||||
</span>
|
|
||||||
<span>Hook</span>
|
|
||||||
</span>
|
|
||||||
</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -4,6 +4,16 @@ from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.http import HttpResponseBadRequest
|
from django.http import HttpResponseBadRequest
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.views import View
|
from django.views import View
|
||||||
|
from rest_framework.parsers import FormParser
|
||||||
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
|
from core.forms import HookForm
|
||||||
|
from core.models import Hook
|
||||||
|
|
||||||
|
|
||||||
|
def get_hooks(user):
|
||||||
|
hooks = Hook.objects.filter(user=user)
|
||||||
|
return hooks
|
||||||
|
|
||||||
|
|
||||||
class Hooks(LoginRequiredMixin, View):
|
class Hooks(LoginRequiredMixin, View):
|
||||||
|
@ -15,7 +25,7 @@ class Hooks(LoginRequiredMixin, View):
|
||||||
return HttpResponseBadRequest
|
return HttpResponseBadRequest
|
||||||
template_name = f"wm/{type}.html"
|
template_name = f"wm/{type}.html"
|
||||||
unique = str(uuid.uuid4())[:8]
|
unique = str(uuid.uuid4())[:8]
|
||||||
hooks = [{"user": "test", "hook": "/help22", "received": "40"}]
|
hooks = get_hooks(request.user)
|
||||||
context = {
|
context = {
|
||||||
"title": f"{type} Demo",
|
"title": f"{type} Demo",
|
||||||
"unique": unique,
|
"unique": unique,
|
||||||
|
@ -23,3 +33,40 @@ class Hooks(LoginRequiredMixin, View):
|
||||||
"hooks": hooks,
|
"hooks": hooks,
|
||||||
}
|
}
|
||||||
return render(request, template_name, context)
|
return render(request, template_name, context)
|
||||||
|
|
||||||
|
|
||||||
|
class AddHook(LoginRequiredMixin, APIView):
|
||||||
|
template_name = "modals/add-hook.html"
|
||||||
|
parser_classes = [FormParser]
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
form = HookForm()
|
||||||
|
context = {"form": form}
|
||||||
|
|
||||||
|
return render(request, self.template_name, context)
|
||||||
|
|
||||||
|
def put(self, request):
|
||||||
|
message = None
|
||||||
|
message_class = "success"
|
||||||
|
|
||||||
|
# data = request.data
|
||||||
|
form = HookForm(request.data)
|
||||||
|
if form.is_valid():
|
||||||
|
hook = form.save(commit=False)
|
||||||
|
hook.user = request.user
|
||||||
|
hook.save()
|
||||||
|
message = "Hook added successfully"
|
||||||
|
else:
|
||||||
|
message = "Error adding hook"
|
||||||
|
message_class = "danger"
|
||||||
|
|
||||||
|
hooks = get_hooks(request.user)
|
||||||
|
|
||||||
|
context = {
|
||||||
|
"hooks": hooks,
|
||||||
|
}
|
||||||
|
if message:
|
||||||
|
context["message"] = message
|
||||||
|
context["class"] = message_class
|
||||||
|
template_name = "partials/hook-list.html"
|
||||||
|
return render(request, template_name, context)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
wheel
|
wheel
|
||||||
django
|
django
|
||||||
pre-commit
|
pre-commit
|
||||||
django-crispy-forms
|
django-crispy-forms==1.14.0
|
||||||
crispy-bulma
|
crispy-bulma
|
||||||
stripe
|
stripe
|
||||||
django-rest-framework
|
django-rest-framework
|
||||||
|
|
Loading…
Reference in New Issue