前端HTML
{% load static %} {% get_static_prefix as getstatic %}注册页面 注册新用户
上面的代码只是HTML ,而JavaScript在下面实例中
FileReader
FileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件。
使用FileReader对象,web应用程序可以异步的读取存储在用户计算机上的文件(或者原始数据缓冲)内容,可以使用File对象或者Blob对象来指定所要处理的文件或数据。
设计RegisterForm组件
from django import forms from . import models from django.forms import widgets from django.core.exceptions import NON_FIELD_ERRORS, ValidationError class 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.*)",sever,{"document_root":setting.MEDIA_ROOT})
配置好上面的url 后,用户可以访media 文件夹下面的所有文件
注意:
server ,是从django.views.static import server导入 from . import settings //url中的使用
总结
以上所述是小编给大家介绍的基于Ajax和forms组件实现注册功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!