I am new to Django but I am creating a Realtor application, I would like the user to be able to update their details using CRUD functionality in the UI.
But I can’t get my request to work:
Heres is my code (views.py):
JavaScript
x
81
81
1
from django.shortcuts import render, redirect
2
from django.contrib import messages, auth
3
from django.contrib.auth.models import User
4
from django.contrib.auth.decorators import login_required
5
from contacts.models import Contact
6
7
8
def register(request):
9
if request.method == 'POST':
10
# Get form values
11
first_name = request.POST['first_name']
12
last_name = request.POST['last_name']
13
username = request.POST['username']
14
email = request.POST['email']
15
password = request.POST['password']
16
password2 = request.POST['password2']
17
18
# Check if passwords match
19
if password == password2:
20
# Check username
21
if User.objects.filter(username=username).exists():
22
messages.error(request, 'That username is taken')
23
return redirect('register')
24
else:
25
if User.objects.filter(email=email).exists():
26
messages.error(request, 'That email is being used')
27
return redirect('register')
28
else:
29
# Looks good
30
user = User.objects.create_user(
31
username=username, password=password, email=email, first_name=first_name, last_name=last_name) # noqa
32
# Login after register
33
auth.login(request, user)
34
messages.success(request, 'You are now logged in')
35
return redirect('index')
36
# user.save()
37
# messages.success(
38
# request, 'You are now registered and can log in')
39
# return redirect('login')
40
else:
41
messages.error(request, 'Passwords do not match')
42
return redirect('register')
43
else:
44
return render(request, 'accounts/register.html')
45
46
47
def login(request):
48
if request.method == 'POST':
49
username = request.POST['username']
50
password = request.POST['password']
51
52
user = auth.authenticate(username=username, password=password)
53
54
if user is not None:
55
auth.login(request, user)
56
messages.success(request, 'You are now logged in')
57
return redirect('dashboard')
58
else:
59
messages.error(request, 'Invalid credentials')
60
return redirect('login')
61
else:
62
return render(request, 'accounts/login.html')
63
64
65
def logout(request):
66
if request.method == 'POST':
67
auth.logout(request)
68
messages.success(request, 'You are now logged out')
69
return redirect('index')
70
71
72
@login_required(login_url='login')
73
def dashboard(request):
74
user_contacts = Contact.objects.order_by(
75
'-contact_date').filter(user_id=request.user.id)
76
77
context = {
78
'contacts': user_contacts
79
}
80
return render(request, 'accounts/dashboard.html', context)
81
Then here is (urls.py)
JavaScript
1
11
11
1
from django.urls import path
2
3
from . import views
4
5
urlpatterns = [
6
path('register', views.register, name='register'),
7
path('login', views.login, name='login'),
8
path('logout', views.logout, name='logout'),
9
path('dashboard', views.dashboard, name='dashboard'),
10
path('edit_profile', views.edit_profile, name='edit_profile'),
11
]
Lastly, here is my code snippet from the requested link in the html file:
JavaScript
1
77
77
1
{% extends 'base.html' %}
2
3
{% block title %} | Dashboard {% endblock %}
4
{% block content %}
5
<section id="showcase-inner" class="py-5 text-white">
6
<div class="container">
7
<div class="row text-center">
8
<div class="col-md-12">
9
<h1 class="display-4">User Dashboard</h1>
10
<p class="lead">Manage your BT Real Estate account</p>
11
</div>
12
</div>
13
</div>
14
</section>
15
16
17
18
<!-- Breadcrumb -->
19
<section id="bc" class="mt-3">
20
<div class="container">
21
<nav aria-label="breadcrumb">
22
<ol class="breadcrumb">
23
<li class="breadcrumb-item">
24
<a href="{% url 'index' %}">
25
<i class="fas fa-home"></i> Home
26
</a>
27
</li>
28
<li class="breadcrumb-item active"> Dashboard</li>
29
</ol>
30
</nav>
31
</div>
32
</section>
33
34
{% comment %} Alerts {% endcomment %}
35
{% include 'partials/__alerts.html' %}
36
37
<section id="dashboard" class="py-4">
38
<div class="container">
39
<div class="row">
40
<div class="col-md-12">
41
<h2>Welcome {{ user.first_name }}
42
<a class="btn btn-success" href="{% url 'edit_profile' %}">
43
Edit Profile
44
</a>
45
</h2>
46
47
</i>
48
{% if contacts %}
49
<p>Here are the property listings that you have inquired about</p>
50
<table class="table">
51
<thead>
52
<tr>
53
<th scope="col">#</th>
54
<th scope="col">Property</th>
55
<th></th>
56
</tr>
57
</thead>
58
<tbody>
59
{% for contact in contacts %}
60
<tr id="listing">
61
<td>{{ contact.id }}</td>
62
<td>{{ contact.listing }}</td>
63
<td>
64
<a class="btn btn-light" href="{% url 'listing' contact.listing_id %}">View Listing</a>
65
</td>
66
</tr>
67
{% endfor %}
68
</tbody>
69
</table>
70
{% else %}
71
<p>You have not made any inquiries</p>
72
{% endif %}
73
</div>
74
</div>
75
</div>
76
</section>
77
Please, any help would be really appreciated, also Have i included all my files correctly?
Thank you so much
Advertisement
Answer
To answer your latest question, you have to create a new view:
JavaScript
1
21
21
1
from django.contrib.auth.decorators import login_required
2
3
@login_required(login_url='login')
4
def updateUser(request, pk):
5
6
user=User.objects.get(id=pk)
7
8
if request.user != user.logged_in:
9
return HttpResponse('Your are not allowed here!!')
10
11
if request.method == 'POST':
12
13
user.name=request.GET['name']
14
user.email_address=request.GET['email_address']
15
16
user.save()
17
return redirect('home')
18
19
context = {'user':user}
20
return render(request, 'user.html', context)
21
Although its not related to your question, I may suggest you use form built-in library from Django. Likewise
JavaScript
1
15
15
1
def registerPage(request):
2
form = MyUserCreationForm()
3
4
if request.method == 'POST':
5
form = MyUserCreationForm(request.POST)
6
if form.is_valid():
7
user = form.save(commit=False)
8
user.username = user.username.lower()
9
user.save()
10
login(request, user)
11
return redirect('home')
12
13
.
14
return render( )
15
create a new file, forms.py, create a new form:
JavaScript
1
7
1
from django.contrib.auth.forms import UserCreationForm
2
3
class MyUserCreationForm(UserCreationForm):
4
class Meta:
5
model = User
6
fields = ['name', 'username', 'email', 'password1', 'password2']
7
in the html template:
JavaScript
1
8
1
<form action="/your-name/" method="post">
2
<label for="your_name">Your name: </label>
3
<input id="your_name" type="text" name="your_name" ">
4
5
6
<input type="submit" value="OK">
7
</form>
8