'Using Models and Views in Django
I need help with a project in Django. In views.py I have created a login to the site including registration, but I need to somehow use models.py to edit and add more user parameters, which I don't think is possible in views. Can someone please help me with this. I am attaching the code below.
views.py
from django.http import HttpResponse
from django.contrib.auth.models import User
from django.contrib import messages
from django.shortcuts import redirect, render
from django.contrib.auth import authenticate, login, logout
from rocnikovka import settings
from django.core.mail import EmailMessage, send_mail
from django.contrib.sites.shortcuts import get_current_site
from django.template.loader import render_to_string
from django.utils.http import urlsafe_base64_encode,urlsafe_base64_decode
from django.utils.encoding import force_bytes, force_str
from . tokens import generate_token
def home(request):
return render(request, "authentication/home.html")
def signup(request):
if request.method == "POST":
# username = request.POST.get("username")
username = request.POST["username"]
fname = request.POST["fname"]
lname = request.POST["lname"]
email = request.POST["email"]
pass1 = request.POST["pass1"]
pass2 = request.POST["pass2"]
if User.objects.filter(username=username):
messages.error(request, "Username already exist! Please try some other
username.")
return redirect("home")
if User.objects.filter(email=email).exists():
messages.error(request, "Email Address already registered! ")
return redirect("home")
if len(username)>20:
messages.error(request, "Username must be under 20 characters.")
return redirect('home')
if pass1 != pass2:
messages.error(request, "Passwords did not match")
return redirect('home')
if not username.isalnum():
messages.error(request, "Username must be Alpha-numeric!")
return redirect("home")
myuser = User.objects.create_user(username, email, pass1)
myuser.first_name = fname
myuser.last_name = lname
myuser.is_active = False
myuser.save()
messages.success(request,"Your account has been succesfully created. We have sent
you a confirmation email, please confirm your email in order to activate your
account. ")
# Welcome Email
subject = "Welcome to our games sites"
message="Hello " + myuser.first_name + "!! \n" + "Welcome to our games sites!! \n
Thank you for visiting our website \n we have also sent you a confirmation email,
please confirm your email address in order to activate your account, \n\n
Thanking you, \n Jiří Bezděkovský"
from_email = settings.EMAIL_HOST_USER
to_list = [myuser.email]
send_mail(subject, message, from_email,to_list,fail_silently=True )
# Email Address confirmation Email
current_site = get_current_site(request)
email_subject ="Confirm your email in games sites"
message2 = render_to_string('email_confirmation.html',{
'name': myuser.first_name,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(myuser.pk)),
'token': generate_token.make_token(myuser)
})
email = EmailMessage(
email_subject,
message2,
settings.EMAIL_HOST_USER,
[myuser.email],
)
email.fail_silently = True
email.send()
return redirect("signin")
return render(request, "authentication/signup.html")
def activate(request, uidb64, token):
try:
uid=force_str(urlsafe_base64_decode(uidb64))
myuser=User.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, User.DoesNotExist):
myuser=None
if myuser is not None and generate_token.check_token(myuser, token):
myuser.is_active = True
myuser.save()
login(request, myuser)
messages.success(request, "Your Account has been activated!!")
return redirect("signin")
else:
return render(request, "activation_failed.html")
def signin(request):
if request.method =="POST":
username = request.POST["username"]
pass1 = request.POST["pass1"]
user = authenticate(username=username, password=pass1)
if user is not None:
login(request, user)
fname = user.first_name
return render(request, "authentication/index.html", {"fname": fname})
else:
messages.error(request, "Bad Credentials!")
return redirect("home")
return render(request, "authentication/signin.html")
def signout(request):
logout(request)
messages.success(request, "Logged Out Successfully!")
return redirect("home")
# return render(request, "authentication/signout.html")
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
