1注册上传头像

创建admin管理员代码:python3 manage.py createsuperuser

1.在setting文件中配置,用户注册成功之后自动生成用户上传的静态文件,这里需要特别注意的是,如果我们在数据库设置了默认图片存放地址,我们需要与下面的地址保持一致,否知前端找不到默认头像。

# media配置,能够将用户上传的所有文件都统一指定到这个media文件夹下
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

2.文件创建好了,我们需要将我们的文件开设访问接口,以便前端能够访问到;这里我们需要特别注意,这里的开始是不能随便开设的,以防数据后端数据泄露。

from django.views.static import serve
from BBS import settings
# 手动开设后端资源,将media文件夹下面所有的资源暴露给外界,
# media可以随便改,但是后面的是固定写法,不可改变,
url(r'^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}),

3.前端:将头像图片加载到页面的时候,在img标签的src这样的写

<img class="media-object" src="/media/{{ article.blog.userinfo.avatar }}/" alt="..." height="60">

4.前端加载头像图片和发送后端的时候我们需要注意些,

<script>
//这里是对头像的事件做一些处理
$('#mdd').on('change', function () {
//在这里特别注意,需要用到一个内置对象,FileReader完成文件的读取操作
let MyFileReader = new FileReader();
//获取用户要上传的文件对象
let fileObj = $(this)[0].files[0];
//让文件阅读器读取文件
MyFileReader.readAsDataURL(fileObj);//这里的操作是IO操作,属于异步
//将读取之后的内容替换到img标间scr属性中
MyFileReader.onload = function () { //因为是异步操作所有这里我们要等待文件阅读完之后
//再将结果替换到img标间中取
$('#img').attr('src', MyFileReader.result)
}
});
//提交按钮绑定事件
$('#submit').click(function () {
//第一步当点击事件触发后,将数据提交给后端
//先定义一个函数,这里的FormData是form中的一个函数
let MyFormData = new FormData();
//接下来就是往里面添加键值对
//普通的键值对添加完毕后
// serializeArray序列化表单元素,返回 JSON 数据结构数据(就是利用form标签内部有一个自动序列化普通键值对的方法,,)
$.each($('#myform').serializeArray(), function (index, obj) {
//获取到的值是index是索引,obj是获取的对象
//将获取到的对象添加到函数中
MyFormData.append(obj.name, obj.value)
});//刚刚我这里把 ''})''弄到后面去了,结果还是可以运行但是出现了添加了值却显示为空的现象
//接下来手动添加文件数据
MyFormData.append('avatar', $('#mdd')[0].files[0]);//以avatar定义为name,后面的值作为value
//发送ajax请求
$.ajax({
url: '',
type: 'post',
data: MyFormData,
//发送文件一定要指定两个参数
processData: false,
contentType: false,
success: function (data) {
if (data.code == 1000) {
//注册成功,调转到登录页面,或你自己指定其他路径,
//从后端鞋垫到data中,前度直接从data中取
window.location.href = data.url
} else {
$.each(data.msg, function (index, obj) {
//这里的index就是报错的字段,obj就是错的信息,数组的形式
//获取报错字段,手动拼接该字段对应的input的框的id值
let targetId = '#id_' + index;//+利用字符串拼接方式
$(targetId).next().text(obj[0]).parent().addClass('has-error')//找到对应的input标签,
//然后通过next找到下面span给文本添加值
//并且给其添加属性 })
}
}
}) });
//input框获取焦点事件
$('input').focus(function () {
//获取焦点后设置文本为空,父标签删除 class="has-error"
$(this).next().text('').parent().removeClass('has-error')
})
</script>

2.登录图片验证码校验

在登录的时候我们需要特别注意的是,这里我们需要做一个图片的验证码做校验。

1.这里我们需要引入一个特别重要的模块

from PIL import Image, ImageDraw, ImageFont
import random
from io import BytesIO, StringIO

2.获取验证码背景颜色的三个色号:

def get_random():
return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)

3.获取图片相关的验证码:

def get_code(request):
# 利用pillow模块自动生成图片
# 生成图片对象
img_obj = Image.new('RGB', (360, 35), get_random())
# 将生成好的图片对象交给ImageDrawa在图片生成一个画笔
img_draw = ImageDraw.Draw(img_obj)
# 设置一个字体样式
img_font = ImageFont.truetype('static/font/111.ttf', 30) # 随机字符串,大小写单词加数字,5位每一位都可以是大小写字母,小写字母或数字
code = ''
for i in range(5):
upper_str = chr(random.randint(65, 90))
lower_str = chr(random.randint(97, 122))
random_int = str(random.randint(0, 9))
# 随机取一个
tmp = random.choice([upper_str, lower_str, random_int])
# 朝图片上写一个,五个值设置不同的颜色、字体。在前端展示给用户
img_draw.text((i * 60 + 60, 0), tmp, get_random(), img_font)
code += tmp # 把值添加到code中,然后保存到session中,用于校验前端提交的值 # 把code添加到session中,这个验证码后面其他视图函数可能要用到 找个地方存储一下 并且这个地方全局的视图函数都能访问
request.session['code'] = code
# 生成一个二进制对象
io_obj = BytesIO()
# 保存二进制的图片对象,并以png格式,
img_obj.save(io_obj, 'png') # 返回二进制图片的值
return HttpResponse(io_obj.getvalue())

4.在前端的img的src写入函数的URL,这样就会自动在这个img标签中自动生成一张随机字符串的图片:

 <img src="/get_code/" alt="" width="260" height="35" id="id_img">

前端js处理图片的时候,有两种或更多情况,下面展示两种情况,一种是当点击图片的时候刷新验证码图片,第二种是登录错误的时候也需要刷新下验证码图片:

 //给验证码图片绑定一个点击一次就会更改一次事件
$('#id_img').click(function () {
//获取当前img的路径
var oldPath = $(this).attr('src');
$(this).attr('src', oldPath += '?') //将oldPath路径通过+进行字符串拼接
});
//登录错误的时候也需要刷新下验证码图片
var oldPath = $('#id_img').attr('src');
$('#id_img').attr('src', oldPath += '?')

BBS-登录注册的更多相关文章

  1. 1209 BBS 登录

    目录 上周内容 今日内容 url.py views.py login home.html 逻辑流程 登录功能 上周内容 bbs项目 项目开发流程 需求分析 架构设计 分组开发 我们一般情况下都只是作用 ...

  2. web全栈开发之网站开发二(弹出式登录注册框前端实现-类腾讯)

    这次给大家分享的是目前很多网站中流行的弹出式登录框,如下面的腾讯网登录界面,采用弹出式登录的好处是大大提升了网站的用户体验和交互性,用户不用重新跳转到指定的页面就能登录,非常方便 先来个演示地址 要实 ...

  3. android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...

  4. JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册

    写在最前: 下午有招聘会,不想去,总觉得没有准备好,而且都是一些不对口的公司,可是又静不下心来,就来写个博客. 最近在仿造一个书城的网站:http://www.yousuu.com ,UI直接拿来用, ...

  5. HTML登录注册界面怎么制作?

    在没有学习CSS样式的前提下,是如何做一个简单的注册界面的. 一.表单标签(form) 首先我们先写一个<form></form>的标签,form标签属于表单标签,通常我们的登 ...

  6. php+ajax 登录注册页面

    主要是登录注册功能,前端后台验证没有什么,这个大家可以自己加上去,比如过滤啊,正则啊等 还是先放图吧 这是登录及注册界面  点击注册切换到注册界面,点击登录切换到登录界面 <!DOCTYPE h ...

  7. 7. Swift 基于Xmpp和openfire实现一个简单的登录注册

    1. 基本步骤:首先导入Xmpp框架,配置环境 ->由于我们使用的是OC的Xmpp框架,再进行Swift开发时需要进行桥接. 具体方法就是创建一个基于c的.h的头文件,然后将我们需要编译OC的语 ...

  8. Nodejs学习总结 -Express 登录注册示例(二)

    项目创建后,我们来做个登录注册实例,详细操作步骤如下. 1.新建项目demo ,具体操作步骤参考上一章内容 https://www.cnblogs.com/Anlycp/ 2.添加mysql和sess ...

  9. iOS开发一个用户登录注册模块需要解决的坑

    最近和另外一位同事负责公司登录和用户中心模块的开发工作,开发周期计划两周,减去和产品和接口的协调时间,再减去由于原型图和接口的问题,导致强迫症纠结症状高发,情绪不稳定耗费的时间,能在两周基本完成也算是 ...

  10. 使用Struts2搭建登录注册示例

    使用Struts2来搭建mvc网站框架还是比较容易的,Struts2提供了各项辅助功能,保证了web开发的快速方便.下面使用struts2来搭建一个登录注册示例. 0 项目结构截图 1 搭建Strut ...

随机推荐

  1. ZOJ Problem Set - 1002

    参考: 1.http://www.cnblogs.com/phinecos/archive/2008/09/18/1293017.html 基本思想:回溯法 重点在void Solve(int k,i ...

  2. tar:归档中找不到 tar: 由于前次错误,将以上次的错误状态退出

    今天解压ZendStudio-10.0.0-x86.tar.gz,使用命令tar -zxvf ZendStudio-10.0.0-x86.tar.gz ./然后报下面错误tar: /tm: 归档中找不 ...

  3. [CF544D]Destroying Roads_最短路_bfs

    D. Destroying Roads 题目大意: In some country there are exactly n cities and m bidirectional roads conne ...

  4. python+pycharm+PyQt5 图形化界面安装教程

    python图形化界面安装教程 配置环境变量 主目录 pip所在目录,及script目录 更新pip(可选) python -m pip install --upgrade pip ps:更新出错一般 ...

  5. matplotlib库绘制散点图

    假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温随时间(天)变化的某种规律? a = [11,17,16,11,12,11,12,6,6 ...

  6. 小白windows上搭建linux环境

    我使用的oracle VM VirtualBox,下载使用就好了 这是用的虚拟机,不是搭建linux系统,不用担心把电脑搞坏,游戏打不了 全程很简单,基本都是默认,下一步 下一步 默认下一步 创建 下 ...

  7. echart4数据管理组件dataset学习

    背景 如果后台数据固定,如何动态定制其前端数据展示方式呢?也就是说同一种数据,如何被多个前端Echarts图表复用呢?最近在研究一种数据展示可配置化的功能,然后发现了echart4.0的dataset ...

  8. 怎样使用 vue-cli ( Vue 脚手架 )

    vue-cli 是 Vue 官方出品的快速构建单页应用的脚手架, 相当于 React 官方出品的 create-react-app , 下面演示 vue-cli 的 最 基本用法: 1. 全局安装 v ...

  9. 怎样使用 ssh 命令远程连接服务器?

    以 Git Bash 和 阿里云 ECS云服务器 为例, 想要进行远程连接, 可以使用 ssh 用户名@服务器IP 进行连接. 如下: 注意: 1. 密码输入时是没有提示的 2. root 是超级管理 ...

  10. [C#.net]使用Thread.Sleep界面卡死的问题解决方法

    很多初学者在写C#程序的时候,需要程序等待某个时间,但是又不想用比较繁琐的线程等操作,因此用Thread.Sleep()函数,但是这个函数在等待过程中会操作界面的卡死,那么,如何能保证既不卡死又能达到 ...