Code Monkey home page Code Monkey logo

django-public-admin's Issues

NoReverseMatch at /dashboard/

Reverse for 'logout' not found. 'logout' is not a valid view function or pattern name.

Environment:


Request Method: GET
Request URL: http://localhost:8000/dashboard/

Django Version: 4.1.3
Python Version: 3.9.19
Installed Applications:
['whitenoise.runserver_nostatic',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'django.contrib.admin',
 'django.forms',
 'django_celery_beat',
 'import_export',
 'failures.articles.apps.ArticlesConfig',
 'failures.parameters.apps.ParametersConfig',
 'debug_toolbar',
 'django_extensions']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'whitenoise.middleware.WhiteNoiseMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.common.BrokenLinkEmailsMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware']


Template error:
In template /usr/local/lib/python3.9/site-packages/django/contrib/admin/templates/admin/base.html, error at line 58
   Reverse for 'logout' not found. 'logout' is not a valid view function or pattern name.
   48 :                 {% endif %}
   49 :                 {% if user.is_active and user.is_staff %}
   50 :                     {% url 'django-admindocs-docroot' as docsroot %}
   51 :                     {% if docsroot %}
   52 :                         <a href="{{ docsroot }}">{% translate 'Documentation' %}</a> /
   53 :                     {% endif %}
   54 :                 {% endif %}
   55 :                 {% if user.has_usable_password %}
   56 :                 <a href="{% url 'admin:password_change' %}">{% translate 'Change password' %}</a> /
   57 :                 {% endif %}
   58 :                 <form id="logout-form" method="post" action=" {% url 'admin:logout' %} ">
   59 :                     {% csrf_token %}
   60 :                     <button type="submit">{% translate 'Log out' %}</button>
   61 :                 </form>
   62 :             {% endblock %}
   63 :         </div>
   64 :         {% endif %}
   65 :         {% endblock %}
   66 :         {% block nav-global %}{% endblock %}
   67 :     </div>
   68 :     {% endblock %}

Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 220, in _get_response
response = response.render()
File "/usr/local/lib/python3.9/site-packages/django/template/response.py", line 114, in render
self.content = self.rendered_content
File "/usr/local/lib/python3.9/site-packages/django/template/response.py", line 92, in rendered_content
return template.render(context, self._request)
File "/usr/local/lib/python3.9/site-packages/django/template/backends/django.py", line 62, in render
return self.template.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 175, in render
return self._render(context)
File "/usr/local/lib/python3.9/site-packages/django/test/utils.py", line 111, in instrumented_test_render
return self.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/usr/local/lib/python3.9/site-packages/django/test/utils.py", line 111, in instrumented_test_render
return self.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/usr/local/lib/python3.9/site-packages/django/test/utils.py", line 111, in instrumented_test_render
return self.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 322, in render
return nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 322, in render
return nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 1005, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 472, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "/usr/local/lib/python3.9/site-packages/django/urls/base.py", line 88, in reverse
return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/django/urls/resolvers.py", line 828, in _reverse_with_prefix
raise NoReverseMatch(msg)

Exception Type: NoReverseMatch at /dashboard/
Exception Value: Reverse for 'logout' not found. 'logout' is not a valid view function or pattern name.

Make tests run and pass

Even with pytest-django installed, tests in tests/ directory fails with ImproperlyConfigured exception.

Thus, this issue involves at least two things:

  • Fix the architecture so we can actually run the tests
  • Make sure the existing tests pass (fixing the cobe base or the tests themselves as needed)

Add tox

Depends on #3.

tox will be useful to test this with different versions of Python (from 3.6 to 3.8) and of Django (2 and 3).

Manually test this proof-of-concept

The ideal way to test it, in my humble opinion, is to use this package in Jarbas. The roadmap would look like this:

  • Get Jarbas running inside this package's Poerty virtualenv so we can import from this package
  • Delete jarbas/public_admin directory
  • Create an insance of public_admin.PublicAdminSite in jarbas/dashboard/admin.py (public_apps would be ("chamber_of_deputies",) and public_models would be ("reimbursement",)
  • Check whether or not this breaks Jarbas Dashboard on the browser
  • Check whther no-read-only endpoitns are still non-existent

Security check

I am definitely not the right person to take this task on, but I would like to have someone with a security background to do a security check on Django Public Admin and flag possible issues introduced by this package โ€” and not already present in Django or other parts of the stack.

Override site metadata

For admin I can override the site metadata as follows:

admin.site.site_header = 'your_header'
admin.site.site_title = 'site_title'
admin.site.index_title = 'index_title'

But it seems like public_admin has not site. Is there a way to adjust this metadata?

Fix CI

Add GitHub Actions to:

  • Run tests using tox (depends on #5)
  • Run Black and flake8 checks

Incompatible with Django 3

When i try to install poetry install with the pyproject.toml above:

[tool.poetry]
name = "poeta"
version = "0.1.0"
description = ""
authors = ["Urahara"]

[tool.poetry.dependencies]
python = "^3.6"
django = "3.0.8"
django-public-admin = "^0.0.2"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

Result:

Updating dependencies
Resolving dependencies... (0.4s)

[SolverProblemError]
Because no versions of django-public-admin match >0.0.2,<0.0.3
 and django-public-admin (0.0.2) depends on django (>=2.0.0,<3.0.0), django-public-admin (>=0.0.2,<0.0.3) requires django (>=2.0.0,<3.0.0).
So, because poeta depends on both django (3.0.8) and django-public-admin (^0.0.2), version solving failed.

Slightly modifying to use the latest 2.x release of django i able to use without problems:

[tool.poetry]
name = "poeta"
version = "0.1.0"
description = ""
authors = ["Urahara"]

[tool.poetry.dependencies]
python = "^3.6"
django = "2.2.14"
django-public-admin = "^0.0.2"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

Result:

Updating dependencies
Resolving dependencies... (2.8s)

Writing lock file


Package operations: 4 installs, 0 updates, 0 removals

  - Installing pytz (2020.1)
  - Installing sqlparse (0.3.1)
  - Installing django (2.2.14)
  - Installing django-public-admin (0.0.2)

Make pytest run

Since the tests are not working yet with pytest, I'll be tackling this, as @cuducos suggested: maybe using pytest-django

`models` does not affect the public app

When having models=() and registering the models itself on public_admin, it works. All registered models are shown (DadosAbertosDeFeira/maria-quiteria#114).
Is it a bug or a feature? ๐Ÿ˜…

public_app = PublicApp("datasets", models=())
public_admin = MariaQuiteriaPublicAdminSite(public_apps=public_app)
models_and_admins = [
    (CityCouncilAgenda, CityCouncilAgendaAdmin),
    (CityCouncilAttendanceList, CityCouncilAttendanceListAdmin),
    (CityCouncilExpense, CityCouncilExpenseAdmin),
    (CityCouncilMinute, CityCouncilMinuteAdmin),
    (Gazette, GazetteAdmin),
    (CityHallBid, CityHallBidAdmin),
]

for model, admin in models_and_admins:
    public_admin.register(model, admin)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.