Skip to main content

Setting up user logins

I've been meaning to experiment with user authentication in Django for awhile now, but I kept putting it off. I finally created a new pet project and decided that user authentication was the first thing I wanted to set up for my project.

Django has a built-in User model but the Django documentation highly encourages us to set up a custom user model. Just in case you need to customise it at some point. Even if you have no need for it right now. Looking at the Django documentation was really overwhelming(surprise!) so I looked around for a tutorial I could follow. I've already started a project, so I had to fit whatever tutorial into what I had already set up. The learndjango tutorial(link below) seemed easy enough to follow.

Step 1 : Create a 'User' app
 
Done.

Step 2: Create the initial custom user model

First, I had to add 'users.apps,UsersConfig' to the INSTALLED_APPS.

mainapp/settings.py

Next, I had to tell Django to use my custom user model.

mainapp/settings.py

Time to create a new User model in the 'users' app. If I wanted to include any additional fields beyond the built-in ones, this is where they would go. So far, so good.

users/models.py

Now I needed to create a forms.py in my users app and fill it with the following forms:

users/forms.py

And finally, for the first time ever, I had to add some code to the admin.py, makemigrations and migrate.

users/admin.py

Step 3: Creating my templates

The tutorial then instructs us to make changes to the project's settings.py to tell Django ti use the templates directory. I had already done this previously when I first set up my project, but here it is. The syntax I used is for Django 3.1

mainapp/settings.py

I also added the redirect links for logins and logouts.

mainapp/settings.py

Next, it was template creation time for the login and registration pages. I created my templates that rendered the registration page and the login page. In the tutorial, they used the inbuilt django url paths by including 'django.contrib.auth.urls'. The url path is commented out below because I later decided to add more customisation.

mainapp/urls.py

Including the built in url paths like they did in the tutorial meant including the url paths in the screenshot below. 

From the Django Docs

I continued following the tutorial to set up my registration page.

users/urls.py

users/views.py

Now, for the changes I made after commenting out the url path from the tutorial(above). I wanted to put my templates in my users app's templates folder. I also wanted to rename the url paths, so this is what I did to further customise my url paths:

users/urls.py

I now had a custom url path for Django's built-in login view that included a custom name for the path and a custom filepath to my custom html template. But wait, I needed to make some changes to the code I put in previously. I changed the success_url to my custom user login path.

users/views.py

The register and login pages render and function as they should. They're still hideous at present because they haven't been styled but I'm glad I got it working for now!

 Happiness :) 

Login page

Registration page



References: 
https://consideratecode.com/2018/03/05/django-authentication-views-login-logout/
https://learndjango.com/tutorials/django-custom-user-model
https://docs.djangoproject.com/en/3.1/ref/contrib/auth/#django.contrib.auth.models.User
https://docs.djangoproject.com/en/3.1/topics/auth/customizing/
https://docs.djangoproject.com/en/3.1/topics/auth/default/

Comments

Popular posts from this blog

Deviants in a normal world

It's definitely been a bit since I've seen this graphy. Anyone who has learnt about standard deviation knows this graph. Standard Deviation Standard deviation shows us how spread out all the values in a set are from the mean. The higher the standard deviation, the more spread out the values are over a wider range and the flatter this curve. In a normal distribution, most values are within 1 standard deviation from the mean(the green part of the graph). Apparently NumPy can calculate standard deviation too! import numpy numSet = [ *lots of numbers* ] numSetStdDev = numpy.std(numSet) Variance The variance also indicates how spread out the values in a set are. It measures the average degree to which each value differs from the mean. variance = standard deviation ^2 import numpy numSet = [ *lots of numbers * ] numSetVar = numpy.var(numSet) Source:  https://www.w3schools.com/python/python_ml_standard_deviation.asp

Snakes and ladders

I've started on my Python course. So far, the code has been familiar because the first few basic codes are similar to Javascript. And then modules happened. Confusion and despair! What is the world is 'if __name__ == "__main__": ' and why must I reach this section of my course on a public holiday when none of the instructors are in :( Stack overflow to the rescue, providing me a lifeline while I was drowning in a pit of serpents. I feel eternally indebted to a particular Mr Fooz.  Picture from  here From my understanding, when the Python interpreter reads a source file, it first sets the variable __name__ and then it executes all the code in the file. If that particular file that you are running(i.e. your module) is the main program, the interpreter will assign '__name__ = "__main__" '. Thereafter, any code in the aforementioned 'if' statement is run. If you have, instead, imported a module, the interpreter assigns '__name__ ...

Fizzbuzz

I was today years old when I found out what fizzbuzz was. Yes, I'm late to the party. I was in an interview where the interviewer mentioned that ordinarily they would ask interviewees in for a round of fizzbuzz challenges, as I know. Actually sir, no, I don't know 👀 But he sounded so certain that I must surely know what it is that I was afraid to say anything so I did what I always do when I panic. Look right back saying not a word. I googled this mysterious fizzbuzz problem:  It looks pretty easy. I don't think he meant this actual problem, but problems like this. Because this problem is way too easy to be an actual problem someone asks in an interview. I decided to work on it for fun:  Yup. Super easy. I wish this is all I were asked in an interview 😄