• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    基于Ajax和forms組件實現(xiàn)注冊功能的實例代碼

    來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:51:35
    文檔

    基于Ajax和forms組件實現(xiàn)注冊功能的實例代碼

    基于Ajax和forms組件實現(xiàn)注冊功能的實例代碼:前端HTML <!DOCTYPE html> {% load static %} {% get_static_prefix as getstatic %} <html lang=zh-CN> <head> <meta charset=UTF-8> <meta http-equiv=x-ua-
    推薦度:
    導讀基于Ajax和forms組件實現(xiàn)注冊功能的實例代碼:前端HTML <!DOCTYPE html> {% load static %} {% get_static_prefix as getstatic %} <html lang=zh-CN> <head> <meta charset=UTF-8> <meta http-equiv=x-ua-

    前端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" >
     <link href="{{ getstatic }}plugins/bootstrap-3.3.7/css/bootstrap.min.css" rel="stylesheet">
     <title>注冊頁面</title>
     <style>
     .title-top {
     padding: 0;
     font-size: 21px;
     margin-top: 40px;
     }
     .form-padding {
     padding-right: 65px;
     }
     .has-feedback .country-code {
     width: 53px;
     text-align: right;
     padding-right: 5px;
     }
     .mobile-control-wrap {
     display: flex;
     }
     .mobile-num {
     margin-left: 10px;
     }
     .form-horizontal .form-group {
     margin-right: -15px;
     margin-left: -15px;
     }
     .body-box {
     margin-top: 70px;
     height: 567px;
     width: 68%;
     }
     .cnblogs-btn-blue {
     color: white;
     padding: 6px 14px;
     letter-spacing: 1em;
     padding-left: 2em;
     background-color: RGB(70, 136, 214);
     text-align: center;
     }
     .cnblogs-btn-blue :hover {
     color: white;
     }
     .navbar {
     background-color: RGB(40, 62, 92);
     }
     .side-img-box {
     height: 300px;
     position: relative;
     padding-left: 0;
     margin-top: 168px;
     }
     .side-img-box img {
     position: relative;
     width: 100%;
     top: 50%;
     transform: translateY(-50%);
     border-radius: 8px;
     }
     .text-danger {
     float: right;
     }
     .img-thumbnail {
     width: 100px;
     height: 100px;
     margin-bottom: 20px;
     margin-top: -10px;
     }
     #avatr_img {
     margin-left: 237px;
     }
     </style>
    </head>
    <body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
     <div class="container">
     <!-- Brand and toggle get grouped for better mobile display -->
     <div class="navbar-header">
     <img src="{{ getstatic }}img/TIM截圖20180205110238.png">
     </div>
     <!-- Collect the nav links, forms, and other content for toggling -->
     <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
     <ul class="nav navbar-nav navbar-right">
     <li><a href="#">首頁</a></li>
     <li><a href="#">登錄</a></li>
     <li><a href="#">注冊</a></li>
     <li><a href="#">幫助</a></li>
     </ul>
     </div><!-- /.navbar-collapse -->
     </div><!-- /.container-fluid -->
    </nav>
    <div class="container body-box" style="height: 567px;">
     <div class="center-block body-content">
     <!--頭部提示-->
     <div class="hidden-xs title-top col-sm-12">
     注冊新用戶
     <hr class="head-hr">
     </div>
     <div class="form-wrap">
     <form class="form-horizontal col-sm-8 form-padding" role="form" id="registerForm" method="post"
     novalidate="novalidate">
     <!--每一行-->
     <div id="avatr_img" class="form-group">
     <label for="avatar">
     <img id="avatar_img" class="img-thumbnail" src="{{ getstatic }}img/registersideimg.png" alt="用戶頭像">
     頭像
     </label>  
     <input type="file" style="display: none;" id="avatar">
     </div>
     <div class="form-group">
     <div class="col-sm-2 control-label">
     <label class="w4-2" for="Email">郵       箱</label>
     </div>
     <div class="col-sm-10 has-feedback">
     {{ register_form.email }}
     <span class="text-danger"></span>
     </div>
     </div>
     <div class="form-group">
     <div class="col-sm-2 control-label">
     <label class="w4-4" for="DisplayName">昵稱</label>
     </div>
     <div class="col-sm-10 has-feedback">
     {{ register_form.nik_name }}
     <span class="text-danger field-validation-error"><span id="DisplayName-error"></span></span>
     </div>
     </div>
     <div class="form-group">
     <div class="col-sm-2 control-label">
     <label class="w4-2" for="Password">密       碼</label>
     </div>
     <div class="col-sm-10 has-feedback">
     {{ register_form.password }}
     <span class="text-danger field-validation-error"></span>
     </div>
     </div>
     <div class="form-group">
     <div class="col-sm-2 control-label">
     <label class="w4-4" for="ConfirmPassword">確認密碼</label>
     </div>
     <div class="col-sm-10 has-feedback">
     {{ register_form.repeta_pwd }}
     <span class="text-danger field-validation-error"><span id="mobile-error"></span></span>
     </div>
     </div>
     <!--注冊按鈕-->
     <div class="form-group">
     <div class="col-sm-offset-2 col-sm-10">
     <span class="col-sm-12 ajax-error"></span>
     <input id="submitBtn" onclick="regesite()" type="button"
     class="btn ladda-button center-block cnblogs-btn-blue" value="登錄">
     </div>
     </div>
     <!--協(xié)議提示-->
     <div class="col-sm-offset-2 register-sign">
     <span class="asterisk">*</span> “注冊” 按鈕,即表示您同意并愿意遵守 <a class="look-agreeon" target="_blank"
     >用戶協(xié)議</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主要用于將文件內(nèi)容讀入內(nèi)存,通過一系列異步接口,可以在主線程中訪問本地文件。

    使用FileReader對象,web應用程序可以異步的讀取存儲在用戶計算機上的文件(或者原始數(shù)據(jù)緩沖)內(nèi)容,可以使用File對象或者Blob對象來指定所要處理的文件或數(shù)據(jù)。

    設計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
     ) # 注意這里保存導數(shù)據(jù)庫中的是圖片路徑,并不是圖片
     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 :默認把文件夾創(chuàng)建至根目錄下,如創(chuàng)建至指定位置,需要在setting中配置media。

         如:希望用戶上傳的文件單獨存儲,在setting中配置,

    MEDIA_ROOT= os.path.jion(BASE_DIR,"blog","media")
    //此時,用戶上傳文件時,先創(chuàng)建并將文件保存至“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中的使用

    總結(jié)

    以上所述是小編給大家介紹的基于Ajax和forms組件實現(xiàn)注冊功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    基于Ajax和forms組件實現(xiàn)注冊功能的實例代碼

    基于Ajax和forms組件實現(xiàn)注冊功能的實例代碼:前端HTML <!DOCTYPE html> {% load static %} {% get_static_prefix as getstatic %} <html lang=zh-CN> <head> <meta charset=UTF-8> <meta http-equiv=x-ua-
    推薦度:
    標簽: 注冊 的代碼 實例
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品日韩欧美久久综合| 国产成人精品一区二区三区| 久久免费精品一区二区| 久久人人超碰精品CAOPOREN| 国语自产拍精品香蕉在线播放| 无码国模国产在线无码精品国产自在久国产 | 欧美日韩精品系列一区二区三区国产一区二区精品| 精品国产VA久久久久久久冰 | 久久夜色精品国产噜噜噜亚洲AV | 国产精品部在线观看| 国产亚洲精品xxx| 精品无码AV一区二区三区不卡 | 国产精品99无码一区二区 | 国产麻豆一精品一AV一免费 | 国产精品热久久毛片| 国产精品久久久久9999| 精品人妻大屁股白浆无码| 久久久久久亚洲精品无码| 国产A级毛片久久久精品毛片 | 国产高清在线精品一区小说| 国产精品日本欧美一区二区| 精品国产第一国产综合精品| 日韩国产成人精品视频| 亚洲国产精品成人精品无码区在线| 蜜臀av无码人妻精品| 国产午夜福利精品久久| 国产久爱免费精品视频| 99久久夜色精品国产网站| 中文字幕精品一区二区日本| 69堂午夜精品视频在线| 99精品电影一区二区免费看| 一本一道久久精品综合| 麻豆精品不卡国产免费看| 国产在线不卡午夜精品2021 | 日韩人妻精品无码一区二区三区 | 久久国产精品一区| 精品欧美一区二区在线观看| 精品国产呦系列在线观看免费| 国产精品理论片在线观看| 国产精品国产三级在线专区| 国产综合色产在线精品|