python自动化学习笔记之DAY22

form表单上传文件

例如注册页面上传头像

html创建

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
     <link rel="stylesheet" href="/static/dist/css/bootstrap.css">
     <script src="/static/dist/js/jquery-3.2.1.js"></script>
     <script src="/static/dist/js/bootstrap.js"></script>
      <link rel="stylesheet" href="/static/css/login.css">

      <style>
          #avatar{
              position: relative;
               width: 60px;
              height: 60px;
          }

          #avatar_img,#file{
              width: 60px;
              height: 60px;
              position: absolute;
              left: 60px;
              top:0;
          }
          #file{
              opacity: 0;
           }
    </style>
</head>
<body>

<div class="container">

    <div class="row">
        <form class="col-md-6 col-md-offset-2">
              {% csrf_token %}
              <div class="form-group">
                <label for="user">用户名</label>
                {{ regForm.username }} <span class="error"></span>
              </div>
              <div class="form-group">
                <label for="pwd">密码</label>
                {{ regForm.password }} <span class="error"></span>
              </div>
                <div class="form-group">
                <label for="pwd">确认密码</label>
               {{ regForm.repeat_password }} <span class="error"></span>
              </div>
              <div class="form-group">
                <label for="pwd">邮箱</label>
               {{ regForm.email }} <span class="error"></span>
              </div>

                <div class="form-group" id="avatar">
                    <label for="pwd">头像</label>
                    <p><img src="/static/img/default.png" alt="" id="avatar_img"></p>
                     <p><input type="file" id="file"></p>
               </div>



              <div class="row">
                  <div class="col-md-6">
                      <input type="button"value="注册提交" class="btn btn-primary regBtn"><span class="error"></span>
                  </div>
              </div>
        </form>
    </div>

</div>


<script>
     $(".regBtn").click(function () {
         var formdata=new FormData();

         formdata.append("username",$("#id_username").val());
         formdata.append("password",$("#id_password").val());
         formdata.append("repeat_password",$("#id_repeat_password").val());
         formdata.append("email",$("#id_email").val());
         formdata.append("csrfmiddlewaretoken",$("[name='csrfmiddlewaretoken']").val());
         formdata.append("avatar",$("#file")[0].files[0]);


         $.ajax({
             url:"/reg/",
             type:"post",
             data:formdata,
             contentType:false,
             processData:false,
             success:function (data) {
                 var data=JSON.parse(data);
                 //console.log(data);

                 if(data.user){
                     location.href="/login/"
                 }
                 else {
                     var error_dict=data.error_msg ;    //  {"username":["asda"],"email":["asdsa"]}

                     $(".error").html("");
                     $.each(error_dict,function (i,j) {
                         console.log(i,j);
                         $("#id_"+i).next().addClass("pull-right").html(j[0]).css("color","red")

                         if(i=="__all__"){
                             $("#id_repeat_password").next().html(j[0])
                         }
                     })

                 }
             }

         })

     })


    // 预览功能

    $("#file").change(function () {

          var choose_file=$("#file")[0].files[0];

          var reader=new FileReader();

         reader.readAsDataURL(choose_file);

         reader.onload=function () {
            $("#avatar_img").attr("src",this.result)
        }




    })

</script>


</body>
</html>

创建注册类

def reg(request):

    if request.is_ajax():
        regForm=RegForm(request.POST)

        regResponse={"user":None,"error_msg":None}
        if regForm.is_valid():
            username=regForm.cleaned_data.get("username")
            password=regForm.cleaned_data.get("password")
            email=regForm.cleaned_data.get("email")
            avatar=request.FILES.get("avatar")       
            print(regForm.cleaned_data,"------")
            user=UserInfo.objects.create_user(username=username,password=password,email=email,avatar=avatar)
            regResponse["user"]=user.username

        else:
            regResponse["error_msg"]=regForm.errors  # errors只存错误字段
        return HttpResponse(json.dumps(regResponse))

    regForm=RegForm()

    return render(request,'reg.html',locals())

model里用户信息表

class UserInfo(AbstractUser):
    """
    用户信息
    """
    nid = models.AutoField(primary_key=True)
    nickname = models.CharField(verbose_name='昵称', max_length=32)
    telephone = models.CharField(max_length=11, blank=True, null=True, unique=True, verbose_name='手机号码')
    avatar = models.FileField(verbose_name='头像', upload_to='avatarDir/', default="avatar/default.png")
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    blog = models.OneToOneField(to='Blog', to_field='nid', null=True)

    def __str__(self):
        return self.username

setting里需要设置路径

AUTH_USER_MODEL = "blog.UserInfo"


MEDIA_ROOT=os.path.join(BASE_DIR,"blog","media")

MEDIA_URL="/media/"

 

posted @ 2017-12-14 23:29  糖果的海角sky  阅读(166)  评论(0编辑  收藏  举报