淘客网站模板,网站开发技术最新技术,深圳最好的网站制作公司,互联网保险的优缺点一、django介绍
Django 是一个高级的 Python 网络框架#xff0c;可以快速开发安全和可维护的网站。由经验丰富的开发者构建#xff0c;Django 负责处理网站开发中麻烦的部分#xff0c;因此你可以专注于编写应用程序#xff0c;而无需重新开发。 它是免费和开源的#x…一、django介绍
Django 是一个高级的 Python 网络框架可以快速开发安全和可维护的网站。由经验丰富的开发者构建Django 负责处理网站开发中麻烦的部分因此你可以专注于编写应用程序而无需重新开发。 它是免费和开源的有活跃繁荣的社区丰富的文档以及很多免费和付费的解决方案。
Django 可以使你的应用具有以下优点
完备性 Django 遵循“功能完备”的理念提供开发人员可能想要“开箱即用”的几乎所有功能。因为你需要的一切都是一个”产品“的一部分它们都可以无缝结合在一起遵循一致性设计原则并且具有广泛和最新的文档.
通用性 Django 可以并已经用于构建几乎任何类型的网站—从内容管理系统和维基到社交网络和新闻网站。它可以与任何客户端框架一起工作并且可以提供几乎任何格式包括 HTMLRss 源JSONXML 等的内容。你正在阅读的网站就是基于 Django。
在内部尽管它为几乎所有可能需要的功能例如几个流行的数据库模版引擎等提供了选择但是如果需要它也可以扩展到使用其他组件。
安全性 Django 帮助开发人员通过提供一个被设计为“做正确的事情”来自动保护网站的框架来避免许多常见的安全错误。例如Django 提供了一种安全的方式来管理用户账户和密码避免了常见的错误比如将 session 放在 cookie 中这种易受攻击的做法取而代之的是 cookies 只包含一个密钥实际数据存储在数据库中或直接存储密码而不是密码哈希。
密码哈希是通过密码散列函数发送密码而创建的固定长度值。Django 能通过运行哈希函数并将输出的哈希值与存储的哈希值进行比较来检查输入的密码是否正确。然而由于功能的“单向”性质即使存储的哈希值被泄漏攻击者也难以破解原始密码。
默认情况下Django 可以防范许多漏洞包括 SQL 注入跨站点脚本跨站点请求伪造和点击劫持 (请参阅 网站安全 相关信息如有兴趣).
可扩展 Django 使用基于组件的“无共享”架构 (架构的每一部分独立于其他架构因此可以根据需要进行替换或更改). 在不用部分之间有明确的分隔意味着它可以通过在任何级别添加硬件来扩展服务缓存服务器数据库服务器或应用程序服务器。一些最繁忙的网站已经成功地缩放了 Django以满足他们的需求例如 Instagram 和 Disqus仅举两个例子可自行添加。
可维护性 Django 代码编写是遵照设计原则和模式鼓励创建可维护和可重复使用的代码。特别是它使用了不要重复自己DRY原则所以没有不必要的重复减少了代码的数量。Django 还将相关功能分组到可重用的“应用程序”中并且在较低级别将相关代码分组或模块 模型视图控制器 (MVC) 模式).
灵活性 Django 是用 Python 编写的它在许多平台上运行。这意味着你不受任务特定的服务器平台的限制并且可以在许多种类的 LinuxWindows 和 Mac OsX 上运行应用程序。此外Django 得到许多网络托管提供商的好评他们经常提供特定的基础设施和托管 Django 网站的文档。
二、Bootstrap 简介
为什么使用 Bootstrap
移动设备优先自 Bootstrap 3 起框架包含了贯穿于整个库的移动设备优先的样式。浏览器支持所有的主流浏览器都支持 Bootstrap。 容易上手只要您具备 HTML 和 CSS 的基础知识您就可以开始学习 Bootstrap。响应式设计Bootstrap 的响应式 CSS 能够自适应于台式机、平板电脑和手机。更多有关响应式设计的内容详见 Bootstrap 响应式设计。 它为开发人员创建接口提供了一个简洁统一的解决方案。它包含了功能强大的内置组件易于定制。它还提供了基于 Web 的定制。它是开源的。
三、具体实现
path
path(register,views.register,nameregister),
view
require_http_methods([GET, POST])
def register(request):if request.method GET:return render(request, register.html)else:form RegisterForm(request.POST)if form.is_valid():email form.cleaned_data.get(email)username form.cleaned_data.get(username)password form.cleaned_data.get(password)User.objects.create_user(usernameusername, emailemail, passwordpassword)return redirect(reverse(cwauth:login))else:print(form.errors)return render(request, register.html, {form: form})def send_email_captcha(request):email request.GET.get(email)if not email:return JsonResponse({code:400,message:必须传递邮箱})captcha.join(random.sample(string.digits,4))#[1,2,4,5]#print(captcha)#存储到数据库CaptchaModel.objects.update_or_create(emailemail,defaults{captcha:captcha})send_mail(博客验证码,messagef您的验证码是{captcha},recipient_list[email],from_emailNone)return JsonResponse({code:200,message:邮箱发送验证码发送成功})register.html
{% extends base.html %}
{% block title %}--注册
{% endblock %}
{% block head %}script src{% static jquery/jquery-3.7.1.min.js %}/scriptscript src{% static js/register.js %}/script
{% endblock %}{% block main %}div stylemax-width: 330px; classm-autoh1注册 /h1form action methodPOST{% csrf_token %}div classmb-3label用户名/labelinput typetext nameusername classform-control placeholder用户名/divdiv classmb-3label邮箱/labelinput typeemail nameemail classform-control placeholder邮箱/divdiv classmb-3label验证码/labeldiv classinput-group mb-3input typetext classform-control namecaptcha placeholder验证码aria-labelRecipients username button classbtn btn-outline-secondary typebutton idyanzhengma获取验证码/button/div/divdiv classmb-3label密码/labelinput typepassword namepassword classform-control placeholder密码/divdiv classmb-3button classbtn btn-primary w-100立即注册/button/div/form/div
{% endblock %}
register.js
$(function () {function bindCaptchaBtnClick() {$(#yanzhengma).click(function (event) {let $this $(this);let email $(input[nameemail]).val();if (!email) {alert(请先输入邮箱!);return;}$this.off(click);//发送ajax$.ajax(/auth/captcha?emailemail,{method:GET,success:function (result) {if(result[code]200){alert(验证码发送成功);}else {alert(result[message])}},fail:function (error){console.log(error);}})//倒计时let countdown 6;let timer setInterval(function () {if (countdown 0) {$this.text(获取验证码);clearInterval(timer);bindCaptchaBtnClick();} else {countdown--;$this.text(countdown s)}}, 1000);})}bindCaptchaBtnClick();
});
发送验证码配置
#邮件相关配置
EMAIL_BACKEND django.core.mail.backends.smtp.EmailBackend# 发送邮件配置
EMAIL_HOST smtp.qq.com# 服务器名称
EMAIL_PORT 25# 服务端口
EMAIL_HOST_USER 14589139.com # 填写自己邮箱
EMAIL_HOST_PASSWORD dpbvxyovdsnmbaae# 在邮箱中设置的客户端授权密码
EMAIL_FROM 董*# 收件人看到的发件人
DEFAULT_FROM_EMAIL EMAIL_HOST_USER
EMAIL_USE_TLS True #是否使用TLS安全传输协议
#EMAIL_USE_SSL True #是否使用SSL加密qq企业邮箱要求使用