【发布时间】:2020-09-18 05:09:33
【问题描述】:
遇到重定向问题,我在我的网站上的注册页面(“帐户/注册”),如果有人注册,则验证码将发送到他的电子邮件 ID 并验证我们有一个 url “帐户/验证”。但是当我尝试注册它时,它会注册一个用户,但不会将其发送到“accounts/verify”,而是将其发送到“accounts/register/accounts/verify”,
另外请让我知道如何使用用户电子邮件地址,同时将他注册到数据库中。我只是想让他的电子邮件ID发送验证码。
这是我的应用的 URL.py:
from django.contrib import admin
from django.urls import path,include
from . import views
from django.contrib.auth.models import User
urlpatterns = [
path('login/', views.login, name='Login-Page'),
path('register/', views.register, name='Registeration-page'),
path('logout/', views.logout),
path('verify/', views.verify, name='verification page')
这是我的 View.py 用于注册和配置文件:
from django.shortcuts import render, redirect
import requests
from django.contrib.auth.models import User, auth
from django.contrib import messages
from datetime import date
import smtplib
import random
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
def register(request):
if request.method == 'POST':
first_name = request.POST['first_name']
last_name = request.POST['last_name']
username = request.POST['username']
email = request.POST['email']
password1 = request.POST['password1']
password2 = request.POST['password2']
if password1==password2:
if User.objects.filter(username=username).exists():
messages.info(request, "Username already taken")
return redirect('accounts/register')
elif User.objects.filter(email=email).exists():
messages.info(request, "email already taken")
return redirect('accounts/register')
else:
user = User.objects.create_user(username=username, password=password1, email=email, first_name=first_name, last_name=last_name)
user.save();
return redirect('accounts/verify') # 'accounts/login'
else:
messages.info(request,"password not matched")
return redirect('accounts/register')
else:
return render(request, 'register.html')
def verify(request):
if request.method == 'POST':
sender_address = 'xyz@gmail.com'
sender_pass = 'password'
user_email = register.user.objects.email
receiver_address = user_email
passd = random.randrange(111111,10000000,39)
mail_content = "Hello This is your verficatiob code " + str(passd)
def check(code):
if code==passd:
return redirect('accounts/login')
else:
messages.info(request,"Code is incorrect")
return redirect('accounts/verify')
message = MIMEMultipart()
message['From'] = sender_address
message['To'] = receiver_address
message['Subject'] = 'Verification Code'
message.attach(MIMEText(mail_content, 'plain'))
session = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT)
session.starttls()
session.login(sender_address, sender_pass)
text = message.as_string()
session.sendmail(sender_address, receiver_address, text)
session.quit()
print('Mail Sent')
code = request.POST['code']
check(code)
else:
return render(request, 'email_verify.html')
这是我的注册模板:
<div class="limiter">
<div class="container-login100" style="background-image: url ('/images/bg-01.jpg');">
<div class="wrap-login100 p-l-55 p-r-55 p-t-65 p-b-54">
<form action="{{register}}" method="post">
{% csrf_token %}
<!--<form class="login100-form validate-form">-->
<span class="login100-form-title p-b-49">
Registration
</span>
<div>
{% for message in messages %}
<input class="wrap-input validate-input m-b-23" data-validate="{{message}}">
{% endfor %}
</div>
<div class="wrap-input100 validate-input m-b-23" data-validate = "First name is reauired">
<span class="label-input100"><th>first name</th></span>
<input class="input100" type="text" name="first_name" placeholder="Type your First name">
<span class="focus-input100" data-symbol=""></span>
</div>
<div class="wrap-input100 validate-input m-b-23" data-validate = "Last name is reauired">
<span class="label-input100"><th>last name</th></span>
<input class="input100" type="text" name="last_name" placeholder="Type your Last name">
<span class="focus-input100" data-symbol=""></span>
</div>
<div class="wrap-input100 validate-input" data-validate="Username is required">
<span class="label-input100">Username</span>
<input class="input100" type="username" name="username" placeholder="Type your username">
<span class="focus-input100" data-symbol=""></span>
</div>
<div class="wrap-input100 validate-input" data-validate="email is required">
<span class="label-input100">email</span>
<input class="input100" type="email" name="email" placeholder="Type your email">
<span class="focus-input100" data-symbol=""></span>
</div>
<div class="wrap-input100 validate-input" data-validate="password is required">
<span class="label-input100">Password</span>
<input class="input100" type="password" name="password1" placeholder="Type your password">
<span class="focus-input100" data-symbol=""></span>
</div>
<div class="wrap-input100 validate-input" data-validate="confirm password is required">
<span class="label-input100">Confirm Password</span>
<input class="input100" type="password" name="password2" placeholder="Type your password Again">
<span class="focus-input100" data-symbol=""></span>
</div>
<br>
<div class="container-login100-form-btn">
<div class="wrap-login100-form-btn">
<div class="login100-form-bgbtn"></div>
<button class="login100-form-btn">
Register
</button>
</div>
</div>
</form>
</div>
</div>
</div>
这是错误:
Page not found (404)
Request Method: GET
Request URL: localhost/accounts/register/accounts/verify
Using the URLconf defined in made.urls, Django tried these URL patterns, in this order:
admin/
[name='Homepage']
accounts/ login/ [name='Login-Page']
accounts/ register/ [name='Registeration-page']
accounts/ logout/
accounts/ verify/ [name='verification page']
【问题讨论】:
标签: django python-3.x django-forms django-views django-users