Actually, you can’t prevent a superuser from doing anything when using the default permissions system. See django.contrib.auth | Django documentation | Django and Using the Django authentication system | Django documentation | Django
Otherwise, for all the functionality you wish to implement, see Admin actions | Django documentation | Django along with all the ModelAdmin methods and the Admin site methods available for you to override.
As another note, your user_is_admin
function is meaningless. If a person is not authenticated, their session is assigned to the AnonymousUser, which by definition is not staff.
Edit: Additionally, your signup.html
template is expecting to render a form. You are not creating a form in your view, nor are you passing the instance of the form to the template through the context. You may want to review Working with forms | Django documentation | Django