自动化测试平台(Django)(四)--Template介绍之继承extends和包含include

Django是MTV架构,T代表Template,前端展示页面,在前文中也详细讲过(Django介绍)。

在写Template的时候,通常很多页面有共用的部分,比如我们这个自动化平台的导航部分。这时就不需要用到一个一个页面重复写这个公用的部分,比较烦同时也不利于维护。这时候就需有个母版的概念,母版里面写公用的地方,然后每个页面去继承这个母版。比如自动化平台里的索引部分,当然也可以做多次继承。

1母版部分如下:

公用的部分写在base.html里面

不同的部分用如下写法

{% block page-main %}

{% endblock %}

2不同页面继承母版:

使用{% extends 'base.html' %}去继承母版,母版里对应哪个模块里放哪些内容用

{% block page-main %} {% endblock %}与母版设置的对应。

 

3 有一些情况页面大多数都是一样的,有个别地方不一样,可以用到include使用如下:

{% include 'dash.html' %}

include和extends在什么情况下使用到,如下图:

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个有趣的问题。首先,我们需要安装 Django 和一些必要的库,比如 django-crispy-forms 和 django-js-asset。然后我们可以创建一个 Django 视图来处理用户的邮件修改请求,并添加 JS 验证码验证。下面是一个简单的示例代码: ```python from django.shortcuts import render from django.http import HttpResponse from django.contrib.auth.decorators import login_required from django.contrib import messages from django.views.decorators.csrf import csrf_protect from django.utils.decorators import method_decorator from django.views import View from django.conf import settings from django.core.mail import send_mail from django.template.loader import render_to_string from .forms import EmailChangeForm from .utils import generate_code class EmailChangeView(View): form_class = EmailChangeForm template_name = 'email_change.html' success_url = '/account/profile/' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super().dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): form = self.form_class() return render(request, self.template_name, {'form': form}) @csrf_protect def post(self, request, *args, **kwargs): form = self.form_class(request.POST) if form.is_valid(): email = form.cleaned_data['email'] if email == request.user.email: messages.warning(request, 'New email address cannot be the same as current email address.') return render(request, self.template_name, {'form': form}) code = generate_code() request.session['email_change_code'] = code request.session['email_change_email'] = email subject = 'Email Change Verification Code' message = render_to_string('email_change_email.txt', {'code': code}) from_email = settings.DEFAULT_FROM_EMAIL recipient_list = [email] send_mail(subject, message, from_email, recipient_list, fail_silently=False) return render(request, 'email_change_code.html') else: return render(request, self.template_name, {'form': form}) class EmailChangeCodeView(View): template_name = 'email_change_code.html' @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super().dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): return render(request, self.template_name) @csrf_protect def post(self, request, *args, **kwargs): code = request.POST.get('code', '') email = request.session.get('email_change_email', '') if code == request.session.get('email_change_code', ''): request.user.email = email request.user.save() messages.success(request, 'Your email address has been changed successfully.') del request.session['email_change_code'] del request.session['email_change_email'] return redirect(self.success_url) else: messages.error(request, 'Invalid verification code.') return render(request, self.template_name) ``` 在上面的代码中,我们定义了两个视图:`EmailChangeView` 和 `EmailChangeCodeView`。`EmailChangeView` 处理用户的邮件修改请求,它使用一个名为 `EmailChangeForm` 的自定义表单类,该表单类包含一个名为 `email` 的字段。在提交表单时,我们首先验证表单数据是否有效,如果有效我们将生成一个随机验证码并将其存储到 Django 会话中。我们还将新的电子邮件地址存储到会话中,以便在下一个视图中使用。然后我们会向用户的新邮件地址发送一封电子邮件,其中包含验证码。在用户通过电子邮件验证后,我们将更新用户的电子邮件地址,并将其重定向到个人资料页面。 `EmailChangeCodeView` 用于验证用户发送的验证码是否正确。如果验证码正确,我们将更新用户的电子邮件地址并将其重定向到个人资料页面。否则,我们将向用户显示错误消息。 现在我们需要为 `EmailChangeForm` 添加一个名为 `email` 的字段,并将其与 JS 验证码验证集成。下面是一个示例代码: ```python from django import forms from django.conf import settings from django.core.exceptions import ValidationError class EmailChangeForm(forms.Form): email = forms.EmailField(label='New Email Address') def clean_email(self): email = self.cleaned_data.get('email') if email == self.initial.get('email'): raise ValidationError('New email address cannot be the same as current email address.') if settings.DEBUG: return email if not self.fields['email'].widget.is_hidden: if not self.cleaned_data.get('captcha'): raise ValidationError('Please enter the verification code.') if not self.fields['captcha'].widget.check_captcha(self.cleaned_data['captcha']): raise ValidationError('Invalid verification code.') return email ``` 在上面的代码中,我们重写了 `clean_email` 方法来添加 JS 验证码验证。如果在开发模式下,我们将跳过验证码验证。否则,我们将检查用户是否输入了验证码,如果没有,我们将引发 ValidationError。如果用户输入了验证码,我们将使用 `check_captcha` 方法来验证验证码是否正确。如果验证码不正确,我们将引发 ValidationError。 最后,我们需要为我们的表单添加 JS 验证码验证支持。我们可以使用 django-js-asset 库来生成 JavaScript 代码,并在模板中包含该代码。下面是一个示例模板: ```html {% extends 'base.html' %} {% load crispy_forms_tags %} {% block content %} <h1>Change Email Address</h1> {% crispy form %} {% endblock %} {% block extra_js %} {% include 'django_js_assets.html' %} <script type="text/javascript"> $(function() { $('form').on('submit', function(event) { if (!$('#id_captcha').is(':hidden')) { event.preventDefault(); $.ajax({ url: '{% url "captcha_image" %}', dataType: 'json', success: function(data) { var img = new Image(); img.src = data.image_url; var captcha = prompt('Please enter the verification code:', ''); if (captcha) { $('#id_captcha').val(captcha); $('form').submit(); } } }); } }); }); </script> {% endblock %} ``` 在上面的模板中,我们首先使用 `crispy_forms_tags` 库来渲染表单。然后我们在 `extra_js` 块中包含 JavaScript 代码。在我们的 JavaScript 代码中,我们将拦截表单提交事件,并检查验证码是否可见。如果验证码可见,我们将使用 AJAX 请求来获取验证码图像,并要求用户输入验证码。如果用户输入了验证码,我们将将其设置为表单字段的值,并重新提交表单。 这样,我们就可以使用 Django 和 JS 验证码验证来实现用户电子邮件修改功能了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值