text: from django.shortcuts import render
  import logging
  from .forms import RegisterForm, LoginForm
  from django.contrib.auth import authenticate, login, logout
  # from django.views.generic.edit import FormView
  from django.views.generic import FormView, RedirectView
  from django.contrib.auth import get_user_model
  from django.shortcuts import get_object_or_404
  from django.http import HttpResponseRedirect, HttpResponseForbidden
  from django.urls import reverse
  from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
  from django.contrib.auth import REDIRECT_FIELD_NAME
  from django.views.decorators.csrf import csrf_protect
  from django.contrib import auth
  from django.views.decorators.cache import never_cache
  from django.shortcuts import redirect
  from django.utils.decorators import method_decorator
  from django.views.decorators.debug import sensitive_post_parameters
  from django.utils.http import is_safe_url
  from DjangoBlog.utils import send_email, get_md5, get_current_site
  from django.conf import settings
  from .models import BlogUser
  
  logger = logging.getLogger(__name__)
  
  
  # Create your views here.
  
  class RegisterView(FormView):
      form_class = RegisterForm
      template_name = 'account/registration_form.html'
  
      def form_valid(self, form):
          if form.is_valid():
              user = form.save(False)
              user.is_active = False
              user.source = 'Register'
              user.save(True)
              site = get_current_site().domain
              sign = get_md5(get_md5(settings.SECRET_KEY + str(user.id)))
  
              if settings.DEBUG:
                  site = '127.0.0.1:8000'
              path = reverse('account:result')
              url = "http://{site}{path}?type=validation&id={id}&sign={sign}".format(
                  site=site, path=path, id=user.id, sign=sign)
  
              content = """
                              <p>请点击下面链接验证您的邮箱</p>
  
                              <a href="{url}" rel="bookmark">{url}</a>
  
                              再次感谢您！
                              <br />
                              如果上面链接无法打开，请将此链接复制至浏览器。
                              {url}
                              """.format(url=url)
              send_email(
                  emailto=[
                      user.email,
                  ],
                  title='验证您的电子邮箱',
                  content=content)
  
              url = reverse('accounts:result') + \
                  '?type=register&id=' + str(user.id)
              return HttpResponseRedirect(url)
          else:
              return self.render_to_response({
                  'form': form
              })
  
  
  class LogoutView(RedirectView):
      url = '/login/'
  
      @method_decorator(never_cache)
      def dispatch(self, request, *args, **kwargs):
          return super(LogoutView, self).dispatch(request, *args, **kwargs)
  
      def get(self, request, *args, **kwargs):
          from DjangoBlog.utils import cache
          cache.clear()
          logout(request)
          return super(LogoutView, self).get(request, *args, **kwargs)
  
  
  class LoginView(FormView):
      form_class = LoginForm
      template_name = 'account/login.html'
      success_url = '/'
      redirect_field_name = REDIRECT_FIELD_NAME
  
      @method_decorator(sensitive_post_parameters('password'))
      @method_decorator(csrf_protect)
      @method_decorator(never_cache)
      def dispatch(self, request, *args, **kwargs):
  
          return super(LoginView, self).dispatch(request, *args, **kwargs)
  
      def get_context_data(self, **kwargs):
          redirect_to = self.request.GET.get(self.redirect_field_name)
          if redirect_to is None:
              redirect_to = '/'
          kwargs['redirect_to'] = redirect_to
  
          return super(LoginView, self).get_context_data(**kwargs)
  
      def form_valid(self, form):
          form = AuthenticationForm(data=self.request.POST, request=self.request)
  
          if form.is_valid():
              from DjangoBlog.utils import cache
              if cache and cache is not None:
                  cache.clear()
              logger.info(self.redirect_field_name)
  
              auth.login(self.request, form.get_user())
              return super(LoginView, self).form_valid(form)
              # return HttpResponseRedirect('/')
          else:
              return self.render_to_response({
                  'form': form
              })
  
      def get_success_url(self):
  
          redirect_to = self.request.POST.get(self.redirect_field_name)
          if not is_safe_url(
              url=redirect_to, allowed_hosts=[
                  self.request.get_host()]):
              redirect_to = self.success_url
          return redirect_to
  
  
  def account_result(request):
      type = request.GET.get('type')
      id = request.GET.get('id')
  
      user = get_object_or_404(get_user_model(), id=id)
      logger.info(type)
      if user.is_active:
          return HttpResponseRedirect('/')
      if type and type in ['register', 'validation']:
          if type == 'register':
              content = '''
      恭喜您注册成功，一封验证邮件已经发送到您 {email} 的邮箱，请验证您的邮箱后登录本站。
      '''.format(email=user.email)
              title = '注册成功'
          else:
              c_sign = get_md5(get_md5(settings.SECRET_KEY + str(user.id)))
              sign = request.GET.get('sign')
              if sign != c_sign:
                  return HttpResponseForbidden()
              user.is_active = True
              user.save()
              content = '''
              恭喜您已经成功的完成邮箱验证，您现在可以使用您的账号来登录本站。
              '''
              title = '验证成功'
          return render(request, 'account/result.html', {
              'title': title,
              'content': content
          })
      else:
          return HttpResponseRedirect('/')
  