<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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組件實現注冊功能的實例代碼

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

        基于Ajax和forms組件實現注冊功能的實例代碼

        基于Ajax和forms組件實現注冊功能的實例代碼:前端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組件實現注冊功能的實例代碼:前端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>
         <!--協議提示-->
         <div class="col-sm-offset-2 register-sign">
         <span class="asterisk">*</span> “注冊” 按鈕,即表示您同意并愿意遵守 <a class="look-agreeon" target="_blank"
         >用戶協議</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 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<path>.*)",sever,{"document_root":setting.MEDIA_ROOT})

        配置好上面的url 后,用戶可以訪media 文件夾下面的所有文件

           注意:    

         server ,是從django.views.static import server導入
            from . import settings //url中的使用

        總結

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

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

        文檔

        基于Ajax和forms組件實現注冊功能的實例代碼

        基于Ajax和forms組件實現注冊功能的實例代碼:前端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
        主站蜘蛛池模板: 久久久久亚洲精品无码系列| 亚洲人成国产精品无码| 亚洲欧洲国产精品你懂的| aa级毛片毛片免费观看久| 亚洲国产精品日韩| 一级做a爱过程免费视| 亚洲色偷拍区另类无码专区| av成人免费电影| 亚洲午夜福利AV一区二区无码 | 在线精品亚洲一区二区| 最近的中文字幕大全免费版| 亚洲av永久无码精品网址| 国产人成免费视频| AAAAA级少妇高潮大片免费看| 国产l精品国产亚洲区在线观看| 久久精品免费电影| 亚洲AV无码一区二区三区人| 午夜视频在线在免费| 一级做受视频免费是看美女| 亚洲va久久久噜噜噜久久天堂| 99久久久国产精品免费蜜臀| 亚洲一区二区三区深夜天堂| 国产在线a不卡免费视频| 中文字幕免费观看全部电影| 亚洲黑人嫩小videos| 日本一道一区二区免费看| 成年网站免费入口在线观看| 亚洲av色福利天堂| 成年女性特黄午夜视频免费看| 免费人人潮人人爽一区二区| 亚洲精品福利视频| 午夜dj免费在线观看| a毛片全部播放免费视频完整18| 亚洲色图黄色小说| 亚洲国产精品碰碰| 国产男女爽爽爽爽爽免费视频| 亚洲AV无码专区在线厂| 亚洲AV无码乱码在线观看富二代| 最近中文字幕mv免费高清视频7 | 亚洲国产人成网站在线电影动漫| 在线观看无码的免费网站|