时间:2021-05-25
前端HTML
<!DOCTYPE html>{% load static %}{% get_static_prefix as getstatic %}<html lang="zh-CN"><head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="https:///agreement.html">用户协议</a>。 </div> <!--hidden--> {% csrf_token %} </form> <div class="hidden-xs col-sm-4 side-img-box"> <div class="side-line"> <div></div> </div> <img src="{{ getstatic }}img/registersideimg.png"> </div> </div> </div></div><script src="{{ getstatic }}js/jquery-3.2.1.min.js"></script><script src="{{ getstatic }}plugins/bootstrap-3.3.7/js/bootstrap.min.js"></script></body></html>上面的代码只是HTML ,而JavaScript在下面实例中
<script> $("#avatar").change(function () { var chooice_file = $(this)[0].files[0]; var reader = new FileReader();// 注意这里,预览本地文件 reader.readAsDataURL(chooice_file); reader.onload=function () { $("#avatar_img").attr("src",this.result) } }) function regesite() { var formdata = new FormData(); //z注意这里 涉及文件上传 formdata.append("email",$("#id_email").val()); formdata.append("nik_name",$("#id_nik_name").val()); formdata.append("password",$("#id_password").val()); formdata.append("repeta_pwd",$("#id_repeta_pwd").val()); formdata.append("valid_img",$("#avatar")[0].files[0]); formdata.append("csrfmiddlewaretoken",$("[name='csrfmiddlewaretoken']").val()); $.ajax({ url: "{% url "regeste" %}", type: "POST", data:formdata, contentType:false, processData:false, success: function (data) { response_data = JSON.parse(data) if(response_data.user){ location.href="{% url " rel="external nofollow" login" %}" }else { // 清空上次错误信息 $("form span").html("") $(".has-feedback").removeClass("has-error") $.each(response_data.error_msg,function (fiel, error_info) { // 显示错误信息 $("#id_"+fiel).parent().addClass("has-error"); $("#id_"+fiel).next().html(error_info[0]);//显示全局错误 // 注意这里 if(fiel=="__all__"){ $("#id_repeta_pwd").next().html(error_info[0]).css("color","red") } }) } } }) }</script>FileReader
FileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件。
使用FileReader对象,web应用程序可以异步的读取存储在用户计算机上的文件(或者原始数据缓冲)内容,可以使用File对象或者Blob对象来指定所要处理的文件或数据。
设计RegisterForm组件
from django import formsfrom . import modelsfrom django.forms import widgetsfrom django.core.exceptions import NON_FIELD_ERRORS, ValidationErrorclass RegisterForm(forms.Form): nik_name = forms.CharField(max_length=32, widget=widgets.TextInput(attrs={"class":"form-control"}), error_messages={"required":"用户不能为空"}) email = forms.EmailField(widget=widgets.EmailInput(attrs={"class":"form-control"}), error_messages={"required":"邮箱不能为空", "invalid":"邮箱格式错误"}) password = forms.CharField(min_length=5, widget=widgets.PasswordInput(attrs={"class":"form-control"}), error_messages={"required": "密码不能为空", "min_length":"最小长度5位", } ) repeta_pwd = forms.CharField(widget=widgets.PasswordInput(attrs={"class":"form-control"}), error_messages={"required": "密码不能为空"}) def clean_nik_name(self): name = self.cleaned_data.get("nik_name") users = models.UserInfo.objects.filter(nik_name=name) if not users: return name else: raise ValidationError("用户已存在") def clean(self): //全局钩子 pwd = self.cleaned_data.get("password") repeta_pwd = self.cleaned_data.get("repeta_pwd") if pwd and repeta_pwd: if pwd == repeta_pwd: return self.cleaned_data else: raise ValidationError("两次密码不一致") else: return self.cleaned_data服务器
def post(self,request): reg_response = {"user": None,"error_msg":""} register_form = RegisterForm(request.POST) if register_form.is_valid(): email = request.POST.get("email") nik_name = request.POST.get("nik_name") password = request.POST.get("password") repeta_pwd = request.POST.get("repeta_pwd") valid = request.FILES.get("valid_img") #注意这里使用的request.FILES.get("") if not valid: valid = "avatardir/TIM图片20171209211626.gif" check_user = models.UserInfo.objects.create_user(username=nik_name,nik_name=nik_name, email=email, password=password, avatar=valid ) # 注意这里保存导数据库中的是图片路径,并不是图片 reg_response = {"user": "user", "error_msg": ""} return HttpResponse(json.dumps(reg_response)) else: reg_response["error_msg"]=register_form.errors return HttpResponse(json.dumps(reg_response))Model中 Userifor 的img
avatar = models.FileField(upload_to='avatar/', default="/avatar/default.gif", verbose_name="主键")注意:
upload_to :默认把文件夹创建至根目录下,如创建至指定位置,需要在setting中配置media。
如:希望用户上传的文件单独存储,在setting中配置,
MEDIA_ROOT= os.path.jion(BASE_DIR,"blog","media")//此时,用户上传文件时,先创建并将文件保存至“putImg”文件夹中,“putImg”,然后将“putImg”放至对应的路径中。# media 配置url(r"^media/(?P<path>.*)",sever,{"document_root":setting.MEDIA_ROOT})配置好上面的url 后,用户可以访media 文件夹下面的所有文件
注意:
server ,是从django.views.static import server导入 from . import settings //url中的使用总结
以上所述是小编给大家介绍的基于Ajax和forms组件实现注册功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
注册功能实现forms组件进行表单验证;用户头像前端实时展示;ajax发送post请求;应用forms组件实现用户输入信息的校验。首先在app目录下创建一个my
本文实例讲述了Ajax异步方式实现登录与验证的详细代码,分享给大家供大家参考。具体如下:登录代码这个是使用Bootstrap3的组件功能实现的登录登录异步登录请
本文实例讲述了jQuery基于ajax实现星星评论代码。分享给大家供大家参考。具体如下:这里使用jquery模仿点评网的星星评论功能,Ajax评论模块,鼠标点击
本文实例讲述了Python基于分析Ajax请求实现抓取今日头条街拍图集功能。分享给大家供大家参考,具体如下:代码:importosimportreimportj
本文实例讲述了.NET的Ajax请求数据提交实现方法。分享给大家供大家参考。具体如下:复制代码代码如下:ajax请求ajax请求会员登录没有账号?立即注册用户名