python - Django - 注册时未收到消息
问题描述
我想通过邮件注册,我都是按照这个指南做的,只是setting.py略有不同,我会在下面展示
https://studygyaan.com/django/how-to-signup-user-and-send-confirmation-email-in-django
检查员没有显示任何红色错误,但由于某种原因,邮件没有收到邮件,并且在未确认邮件的情况下进行了注册
设置.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
MAILER_EMAIL_BACKEND = EMAIL_BACKEND
EMAIL_HOST = 'smtp.yandex.ru'
EMAIL_HOST_PASSWORD = 'mypassfromemail'
EMAIL_HOST_USER = 'myemail@yandex.ru'
EMAIL_PORT = 465
EMAIL_USE_SSL = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
模型.py
import kwargs as kwargs
from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from datetime import datetime, date
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
email_confirmed = models.BooleanField(default=False)
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save()
class Post(models.Model):
published = None
title = models.CharField(max_length=200)
author = models.ForeignKey('auth.User', on_delete=models.CASCADE,)
body = models.TextField()
header_image = models.ImageField(blank=True, null=True, upload_to="images/")
post_date = models.DateField(auto_now_add=True)
category = models.CharField(max_length=255, default='coding')
def __str__(self):
return self.title + '|' + str(self.author)
def get_absolute_url(self):
#return reverse('post_detail', args=[str(self.id)])
return reverse('home')
class Comment(models.Model):
post = models.ForeignKey(Post, related_name="comments", on_delete=models.CASCADE)
name = models.CharField(max_length=255)
body = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '%s - %s' % (self.post.title, self.name)
我的博客/views.py
from pyexpat.errors import messages
from django.views import View
from django.views.generic import ListView, DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Post, Comment
from .forms import CommentForm, SignUpForm
from django.http import HttpResponse
from django.contrib.auth import login
from django.utils.encoding import force_text
from django.utils.http import urlsafe_base64_decode
from django.shortcuts import render, redirect
from django.urls import reverse_lazy
from django.views.generic import View, UpdateView
from .forms import SignUpForm
from django.contrib import messages
from django.contrib.sites.shortcuts import get_current_site
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode
from django.template.loader import render_to_string
from django.contrib.auth import login
from django.contrib.auth.models import User
from django.utils.encoding import force_text
from django.utils.http import urlsafe_base64_decode
from .tokens import account_activation_token
class ActivateAccount(View):
def get(self, request, uidb64, token, *args, **kwargs):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.profile.email_confirmed = True
user.save()
login(request, user)
messages.success(request, ('Your account have been confirmed.'))
return redirect('home')
else:
messages.warning(request, ('The confirmation link was invalid, possibly because it has already been used.'))
return redirect('home')
class SignUpView(View):
form_class = SignUpForm
template_name = 'signup.html'
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False # Deactivate account till it is confirmed
user.save()
current_site = get_current_site(request)
subject = 'Activate Your MySite Account'
message = render_to_string('acc_active_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
user.email_user(subject, message)
messages.success(request, ('Please Confirm your email to complete registration.'))
return redirect('login')
return render(request, self.template_name, {'form': form})
class BlogListView(ListView):
model = Post
template_name = 'home.html'
context_object_name = 'posts'
paginate_by = 2
queryset = Post.objects.all()
class BlogDetailView(DetailView):
model = Post
template_name = 'post_detail.html'
class BlogCreateView(CreateView):
model = Post
template_name = 'post_new.html'
fields = ['title', 'author', 'body', 'header_image']
class BlogCommentView(CreateView):
model = Comment
form_class = CommentForm
template_name = 'post_comment.html'
def form_valid(self, form):
form.instance.post_id = self.kwargs['pk']
return super().form_valid(form)
success_url = reverse_lazy('home')
#fields = '__all__'
class BlogUpdateView(UpdateView):
model = Post
template_name = 'post_edit.html'
fields = ['title', 'body', 'header_image']
class BlogDeleteView(DeleteView):
model = Post
template_name = 'post_delete.html'
success_url = reverse_lazy('home')
@property
def image_url(self):
if self.image:
return getattr(self.photo, 'url', None)
return None
帐户/views.py
from django.urls import reverse_lazy
from django.views import generic
from myblog.forms import SignUpForm
class SignUpView(generic.CreateView):
form_class = SignUpForm
success_url = reverse_lazy('login')
template_name = 'registration/signup.html'
我的博客/urls.py
from django.urls import path
from django.conf.urls import url
from .views import (
BlogListView,
BlogDetailView,
BlogCreateView,
BlogUpdateView,
BlogDeleteView,
BlogCommentView,
SignUpView,
ActivateAccount
)
urlpatterns = [
path('post/new/', BlogCreateView.as_view(), name='post_new'),
path('post/<int:pk>/', BlogDetailView.as_view(), name='post_detail'),
path('post/<int:pk>/edit/', BlogUpdateView.as_view(), name='post_edit'),
path('post/<int:pk>/delete/', BlogDeleteView.as_view(), name='post_delete'),
path('post/<int:pk>/comment/', BlogCommentView.as_view(), name='post_comment'),
path('', BlogListView.as_view(), name='home'),
url(r'^$', BlogListView.as_view(), name='home'),
url(r'^signup/$', SignUpView.as_view(), name='signup'),
path('activate/<uidb64>/<token>/', ActivateAccount.as_view(), name='activate'),
]
帐户/urls.py
from django.urls import path
from .views import SignUpView
urlpatterns = [
path('signup/', SignUpView.as_view(), name="signup"),
]
我不知道哪些文件可以帮助你解决问题,因为我还处于学习 django 的初级阶段,所以请告诉我要给你看什么,我会立即给你看任何文件
解决方案
推荐阅读
- xslt-2.0 - 如何从两个周围元素创建一个元素?
- sql - 等效的字符串包含在 google bigquery
- javascript - 如何从谷歌浏览器扩展中获取 PDF 文件的 URL
- python - 无法使用 Python 安装模块
- excel - Excel中的第一个和第三个星期一列表
- authentication - 后端服务器应用程序能否利用 userinfo 端点检索 OpenID Connect 中的最终用户声明?
- android - 没有类名的 java.lang.ClassNotFoundException
- join - 用 awk 制表符分隔 2 个以上的表(n 个数字文件)文件
- jquery - 以原子方式选择下拉列表中的选定项目
- c# - 无法使用 streamWriter 和 json 发送具有此动词类型的内容主体