Add page for editing UserProfile's display name.

This commit is contained in:
Neil Martinsen-Burrell 2022-09-23 13:27:57 -05:00
parent e0b3023520
commit 5c3460782e
No known key found for this signature in database
GPG key ID: 6A3C818CC10D0184
5 changed files with 81 additions and 8 deletions

View file

@ -8,17 +8,13 @@ from django.conf import settings
from django.contrib import admin from django.contrib import admin
from django.urls import include, path from django.urls import include, path
from registrar.views import health, index from registrar.views import health, index, profile
urlpatterns = [ urlpatterns = [
path("admin/", admin.site.urls), path("admin/", admin.site.urls),
path("", index.index), path("", index.index),
path("health/", health.health), path("health/", health.health),
path("edit_profile/", profile.edit_profile, name="edit-profile"),
# these views respect the DEBUG setting
path("__debug__/", include("debug_toolbar.urls")),
] ]
if settings.DEBUG:
import debug_toolbar
urlpatterns = [
path("__debug__/", include(debug_toolbar.urls)),
] + urlpatterns

10
src/registrar/forms.py Normal file
View file

@ -0,0 +1,10 @@
from django import forms
from .models import UserProfile
class EditProfileForm(forms.ModelForm):
display_name = forms.CharField(widget=forms.TextInput(attrs={'class': 'usa-input'}), label="Display Name")
class Meta:
model = UserProfile
fields = ['display_name']

View file

@ -0,0 +1,26 @@
{% extends 'base.html' %}
{% block title %}
Edit your User Profile
{% endblock title %}
{% block content %}
<form class="usa-form usa-form--large" method="post" enctype="multipart/form-data">
{% csrf_token %}
<fieldset class="usa-fieldset">
<legend class="usa-legend usa-legend--large">Your profile</legend>
<p>
Required fields are marked with an asterisk (<abbr
title="required"
class="usa-hint usa-hint--required"
>*</abbr
>).
</p>
{% for field in profile_form %}
<label class="usa-label" for="id_{{ field.name }}">{{ field.label }}</label>
{{ field }}
{% endfor %}
</fieldset>
<button type="submit" class="usa-button usa-button--big">Save Changes</button>
</form>
{% endblock content %}

View file

@ -1,4 +1,7 @@
from django.test import Client, TestCase from django.test import Client, TestCase
from django.contrib.auth import get_user_model
from registrar.models import UserProfile
class HealthTest(TestCase): class HealthTest(TestCase):
@ -9,3 +12,21 @@ class HealthTest(TestCase):
response = self.client.get("/health/") response = self.client.get("/health/")
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertContains(response, "OK") self.assertContains(response, "OK")
class LoggedInTests(TestCase):
def setUp(self):
username = "test_user"
first_name = "First"
last_name = "Last"
email = "info@example.com"
self.user = get_user_model().objects.create(
username=username, first_name=first_name, last_name=last_name, email=email
)
profile = UserProfile.objects.create(user=self.user)
self.client.force_login(self.user)
def test_edit_profile(self):
response = self.client.get("/edit_profile/")
self.assertContains(response, "Display Name")

View file

@ -0,0 +1,20 @@
from django.shortcuts import redirect, render
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from ..forms import EditProfileForm
@login_required
def edit_profile(request):
if request.method == "POST":
# post to this view when changes are made
profile_form = EditProfileForm(request.POST, instance=request.user.userprofile)
if profile_form.is_valid():
profile_form.save()
messages.success(request, 'Your profile is updated successfully')
return redirect(to='edit-profile')
else:
profile_form = EditProfileForm(instance=request.user.userprofile)
return render(request, 'profile.html', {'profile_form': profile_form})