Interface to define additional profile parameters added
This commit is contained in:
parent
f31771b588
commit
89abad4430
26
README.md
26
README.md
@ -42,6 +42,32 @@ This parameter can be ```True``` or ```False```. It enables or disables the mail
|
|||||||
#### USERS_ADMIN_ACTIVATION
|
#### USERS_ADMIN_ACTIVATION
|
||||||
This parameter can be ```True``` or ```False```. It enables or disables the activation by an admin after mail validation.
|
This parameter can be ```True``` or ```False```. It enables or disables the activation by an admin after mail validation.
|
||||||
|
|
||||||
|
#### USERS_PROFILE_ADDITIONS
|
||||||
|
With the USER_PROFILE_ADDITIONS, you can define additional profile parameters for a user. You need to define a model:
|
||||||
|
```
|
||||||
|
# USERPROFILE Model
|
||||||
|
#
|
||||||
|
class YourUserProfile(models.Model):
|
||||||
|
user = models.OneToOneField(User, unique=True, on_delete=models.CASCADE)
|
||||||
|
your_parameter = models.IntegerField(default=10)
|
||||||
|
```
|
||||||
|
and a form (called with only one parameter ```request```):
|
||||||
|
```
|
||||||
|
class YourUserProfileForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = YourUserProfile
|
||||||
|
fields = ['your_parameter', ]
|
||||||
|
def __init__(self, request):
|
||||||
|
if request.POST:
|
||||||
|
super().__init__(data=request.POST, instance=get_pattuserprofile(request.user))
|
||||||
|
else:
|
||||||
|
super().__init__(instance=get_pattuserprofile(request.user))
|
||||||
|
```
|
||||||
|
The USER_PROFILE_ADDITIONS is a dictionary where the key is the Heading and the value is the Form to be used. It shall be defined in ```settings.py``` like this:
|
||||||
|
```
|
||||||
|
USERS_PROFILE_ADDITIONS = {"Your Profile": 'your.forms.YourUserProfileForm'}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
### Actionabr
|
### Actionabr
|
||||||
|
16
parameter.py
16
parameter.py
@ -1,18 +1,29 @@
|
|||||||
import config
|
import config
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
import importlib
|
||||||
|
|
||||||
USERS_SELF_REGISTRATION = "USERS_SELF_REGISTRATION"
|
USERS_SELF_REGISTRATION = "USERS_SELF_REGISTRATION"
|
||||||
USERS_MAIL_VALIDATION = "USERS_MAIL_VALIDATION"
|
USERS_MAIL_VALIDATION = "USERS_MAIL_VALIDATION"
|
||||||
USERS_ADMIN_ACTIVATION = "USERS_ADMIN_ACTIVATION"
|
USERS_ADMIN_ACTIVATION = "USERS_ADMIN_ACTIVATION"
|
||||||
|
|
||||||
|
USERS_PROFILE_ADDITIONS = "USERS_PROFILE_ADDITIONS"
|
||||||
|
|
||||||
|
|
||||||
DEFAULTS = {
|
DEFAULTS = {
|
||||||
USERS_SELF_REGISTRATION: False,
|
USERS_SELF_REGISTRATION: False,
|
||||||
USERS_MAIL_VALIDATION: True,
|
USERS_MAIL_VALIDATION: True,
|
||||||
USERS_ADMIN_ACTIVATION: True,
|
USERS_ADMIN_ACTIVATION: True,
|
||||||
|
USERS_PROFILE_ADDITIONS: {},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def __get_object_by_name__(object_name):
|
||||||
|
class_data = object_name.split(".")
|
||||||
|
module_path = ".".join(class_data[:-1])
|
||||||
|
class_str = class_data[-1]
|
||||||
|
#
|
||||||
|
module = importlib.import_module(module_path)
|
||||||
|
return getattr(module, class_str)
|
||||||
|
|
||||||
def get(key):
|
def get(key):
|
||||||
# take data from config, settings or defaults
|
# take data from config, settings or defaults
|
||||||
@ -23,7 +34,10 @@ def get(key):
|
|||||||
data = getattr(settings, key)
|
data = getattr(settings, key)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
data = DEFAULTS.get(key)
|
data = DEFAULTS.get(key)
|
||||||
|
if key in [USERS_PROFILE_ADDITIONS, ]:
|
||||||
|
# Change given string to object
|
||||||
|
return {key: __get_object_by_name__(data[key]) for key in data}
|
||||||
|
#
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,6 +9,11 @@
|
|||||||
<h1>{% trans "Language and Timezone" %}</h1>
|
<h1>{% trans "Language and Timezone" %}</h1>
|
||||||
{{ form_userprofile.as_p }}
|
{{ form_userprofile.as_p }}
|
||||||
|
|
||||||
|
{% for head, form in ext_profiles.items %}
|
||||||
|
<h1>{{ head }}</h1>
|
||||||
|
{{ form.as_p }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
<h1>{% trans "Userdata and Password" %}</h1>
|
<h1>{% trans "Userdata and Password" %}</h1>
|
||||||
{{ form_userchange.as_p }}
|
{{ form_userchange.as_p }}
|
||||||
|
|
||||||
|
10
views.py
10
views.py
@ -32,12 +32,19 @@ def password_recovery(request):
|
|||||||
def profile(request):
|
def profile(request):
|
||||||
context = Context(request) # needs to be executed first because of time mesurement
|
context = Context(request) # needs to be executed first because of time mesurement
|
||||||
profile = get_userprofile(request.user)
|
profile = get_userprofile(request.user)
|
||||||
|
# External Additional forms
|
||||||
|
ext_profiles = parameter.get(parameter.USERS_PROFILE_ADDITIONS)
|
||||||
|
# change class to instance
|
||||||
|
ext_profiles = {key: ext_profiles[key](request) for key in ext_profiles}
|
||||||
if request.POST:
|
if request.POST:
|
||||||
form_userprofile = UserProfileForm(request.POST, instance=profile)
|
form_userprofile = UserProfileForm(request.POST, instance=profile)
|
||||||
form_userchange = UserPasswordChangeForm(request)
|
form_userchange = UserPasswordChangeForm(request)
|
||||||
if form_userprofile.is_valid() and form_userchange.is_valid():
|
ext_valid = [form.is_valid() for form in ext_profiles.values()]
|
||||||
|
if form_userprofile.is_valid() and form_userchange.is_valid() and not False in ext_valid:
|
||||||
form_userprofile.save()
|
form_userprofile.save()
|
||||||
form_userchange.save()
|
form_userchange.save()
|
||||||
|
for form in ext_profiles.values():
|
||||||
|
form.save()
|
||||||
return redirect(request.GET.get('next') or '/')
|
return redirect(request.GET.get('next') or '/')
|
||||||
else:
|
else:
|
||||||
form_userprofile = UserProfileForm(instance=profile)
|
form_userprofile = UserProfileForm(instance=profile)
|
||||||
@ -48,6 +55,7 @@ def profile(request):
|
|||||||
_('Profile for %(username)s') % {'username': request.user.username},
|
_('Profile for %(username)s') % {'username': request.user.username},
|
||||||
form_userprofile=form_userprofile,
|
form_userprofile=form_userprofile,
|
||||||
form_userchange=form_userchange,
|
form_userchange=form_userchange,
|
||||||
|
ext_profiles=ext_profiles,
|
||||||
)
|
)
|
||||||
return render(request, 'users/profile.html', context=context)
|
return render(request, 'users/profile.html', context=context)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user