Route class

CRUDLFA+ introduces an MVC-ish pattern, as the Router class is meant to sit between a Model class and its set of View. Your views will have to inherit from Route to work in Router.views. This structural decision made for you by CRUDLFA+ was not exactly designed: it’s an open source rewrite of a module that was ordered in a proprietary project.

class crudlfap.route.Route[source]

The mixin for Views that will make it compatible with Router.

authenticate

False by default, it makes the default has_perm() implementation require Django permission.

urlargs

Args that should be passed to reverse() along with Route.urlfullname.

url

Absolute url to the view, relying on Route.urlfullname and Route.urlargs.

You will be able to check if a user has access to a view with a given object for example as such:

crudlfap.site[YourModel]['detail'].clone(
    request=request,
    object=obj,
).has_perm()

If you want to open a View to all, set authenticate=False, examples:

class YourDetailView(DetailView):
    authenticate = False

class YourRouter(Router):
    views = [
        YourDetailView,
        ListView.clone(authenticate=False),  # example with clone
    ]

Without authenticate=False, the default has_perm() implementation requires the request user to have the permission corresponding to the permission_fullcode attribute.

To create the permission with permission_fullcode, you can browse in your CRUDLFA+ site and navigate to URL list view, for each URL you have link in the menu called “authorized” that lets you select which groups have this permission: it will auto-create the permission in the database if necessary.

dispatch(request, *args, **kwargs)[source]

This will run has_perm prior to super().dispatch().

get_permission_codename()[source]

Return the codename attribute for the view Permission.

get_permission_fullcode()[source]

Return a string with the app name, permission_shortcode and model name.

get_permission_shortcode()[source]

Return the middle part for the view permission.

Returns the urlname by default.

get_url()[source]

Return the URL for this view given its current state. Given that the reverse() method is a class method, this should allow things like:

url = YourView(object=your_object).url
get_urlargs()[source]

Return args for reversing this view url from self. See self.reverse() for detail.

has_perm()[source]

Checks for user permission.

classmethod reverse(*args, **kwargs)[source]

Reverse a url to this view with the given args.

class crudlfap.route.RouteMetaclass[source]

Base autocalculations for views.

app_name

The view’s app name.

model

The view’s model if any.

urlpath

The path for the url path definition.

label

The view label, serves as key in a Router.views.

urlpattern

The Django URL path() instance, for inclusion in url lists.

urlfullname

The full name to reverse the URL, with namespaces if any.

urlfield

The default model field that will be use to match in the URL. It can be pk, or name, slug …

get_app_name()[source]

Return the model’s app_name or None.

get_label()[source]

Return a readable label for this view.

Strips View and Route from class name, also removes the model class name if it finds it: for YourModelUpdateView this returns update.

get_model()[source]

Return the router’s model or None.

get_urlfield()[source]

Return the router urlfield if any, else guess_urlfield()

get_urlfullname()[source]

Return the url name eventually with router and site namespaces.

get_urlname()[source]

Return a string that can be used as url name.

get_urlpath()[source]

Return the urlname.

get_urlpattern()[source]

Return the Django URL object to include in a urlpatterns.