BBS論壇 注冊功能


 

三、注冊功能

# views.py文件
def register(request):
    back_dic = {'code': 100, 'msg': ''}
    form_obj = myforms.MyForm()
    if request.method == 'POST':
        # print("進入了POST!!")
        # 前端傳來了數據,現在要去校驗了
        form_obj = myforms.MyForm(request.POST)
        # 自動校驗,校驗結果保存在 is_valid 中
        if form_obj.is_valid():
            data = form_obj.cleaned_data  # 可以看做,經過清洗的數據,鍵值形式存放,不知道是對象還是字典類型
            # print(type(data))
            # 將confirm_password去掉
            data.pop('confirm_password')
            # 獲取用戶上傳的文件對象,因為上面的data里面是沒有的
            # 上傳的頭像文件是放在request.FILES里面
            file_obj = request.FILES.get('myfile')
            # 判斷用戶是否上傳了自己的頭像,因為設置的是可以不上傳頭像
            # 如果不上傳頭像的話,會使用默認的頭像
            if file_obj:
                # 上傳了頭像,那么就將路徑添加到data中去
                data['avatar'] = file_obj
            # 用create_user  --> 密碼會保存成密文
            models.UserInfo.objects.create_user(**data)
            back_dic['msg'] = '恭喜你,注冊成功!'
            back_dic['url'] = '/login/'
        else:
            back_dic['code'] = '101'
            back_dic['msg'] = form_obj.errors
        return JsonResponse(back_dic)
    return render(request, 'register.html', locals())

 

 

<!--register.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BBS論壇</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
   <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
    <script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-4 col-md-offset-4">
                <h2 class="text-center"> 用戶注冊 </h2>
                {# 使用ajax向后端提交數據 #}
                <form id="myform">
                    {% csrf_token %}
                    {% for form in form_obj %}
                        <div class="form-group">
                            <label for="{{ form_obj.auto_id }}">{{ form.label }}</label>
                            {{ form }}
                        {# 下面用來顯示錯誤信息的 #}
                        <span class="errors pull-right" style="color: red;"></span>
                        </div>
                    {% endfor %}
                </form>
                <div class="form-group">
                    <label for="id_myfile">頭像
                        <img src="/static/img/1.jpg" alt="" width="100" style="margin-left: 20px" id="id_img">
                    </label>
                    <input type="file" name="myfile" id="id_myfile" style="display: none">
                </div>
                <button class="btn btn-success  btn-lg" id="id_submit">注冊</button>
            </div>
        </div>
    </div>
    <script>
        $('#id_myfile').change(function () {
            // 獲取用戶上傳的文件對象
            let fileObj = this.files[0];
            // 生成一個內置對象
            let fileReader = new FileReader();
            // 將文件對象傳遞給內置對象
            fileReader.readAsDataURL(fileObj);
            // 將讀取出文件對象替換到img標簽
            fileReader.onload = function(){ //等文件閱讀器讀取完畢再渲染圖片
                $('#id_img').attr('src', fileReader.result)
            }
        });

        // ajax提交數據
        $('#id_submit').click(function(){
            // 生成一個FormData對象
            let formData = new FormData();
            // 往FormData對象中添加鍵值
            $.each($('#myform').serializeArray(), function (index, obj) {
                formData.append(obj.name, obj.value)
            });

            // 手動添加文件數據
            formData.append('myfile', $('#id_myfile')[0].files[0]);
            $.ajax({
                url: '',
                type:'post',
                data: formData,
                //指定兩個參數
                processData: false,
                contentType: false,
                success: function (data){
                    if (data.code === 100){
                        //跳轉到登錄界面
                        console.log("ok!");
                        location.href = data.url;
                    }else{
                        $.each(data.msg, function (index, obj) {
                            let targetId = '#id_' + index;  // id_username, id_password...
                            $(targetId).next().html(obj[0]).parent().addClass('has-error')
                        })
                    }
                }
            });
        });

        $('input').focus(function () {
            $(this).next().html('').parent().removeClass('has-error')
        })
    </script>
</body>
</html>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM