• 9.28 Django博客项目(一)


    2018-9-28 17:37:18

    今天把博客项目 实现了注册和添加图片的功能!

    放在了自己的github上面 源码! https://github.com/TrueNewBee/bbs_demo

    等晚上做一下页面的优化!哈哈哈,感觉好有成就感的样子!

    2018-9-28 21:40:41

    已经优化好了!实现了登入,注册,注册功能!并且优化了界面!!!

    放上github  : https://github.com/TrueNewBee/bbs_demo

    贴上笔记!

    1. 滑动验证码补充说一下
    
    极验科技
    www.geettest.com  技术文档 直接下别人的api就好了
    
    2. 复习下form组件和文件上传
        form 提交数据的三个步骤
            1. action =" "    # 必须指定url
            2. method  = "POST"        # 需要为post请求
            3. <button type="submit" >注册</button>        # 需要有个提交按钮
        上传文件的时候 ,需要添加下面enctype
        <form  enctype="multipart/form-data">

    3. BBS的注册功能

    贴上 views 和html中的 form 代码

    views:

    # 2018-9-28 12:33:47
    # 注册的视图函数
    def register(request):
        if request.method == "POST":
            ret = {"status": 0, "msg": ""}
            form_obj = forms.RegForm(request.POST)
            print(request.POST)
            # 帮我做校验
            if form_obj.is_valid():
                # 校验通过,去数据库创建一个新的用户
                form_obj.cleaned_data.pop("re_password")
                avatar_img = request.FILES.get("avatar")
                models.UserInfo.objects.create_user(**form_obj.cleaned_data, avatar=avatar_img)
                ret["msg"] = "/index/"
                return JsonResponse(ret)
            else:
                ret["status"] = 1
                ret["msg"] = form_obj.errors
                return JsonResponse(ret)
        # 生成一个form对象
        form_obj = forms.RegForm()
        return render(request, "register.html", {"form_obj": form_obj})

    html 中的form代码:

                <form novalidate action="/reg/" method="post" class="form-horizontal reg-form" enctype="multipart/form-data">
                    {% csrf_token %}
                    <div class="form-group">
                        <label for="{{ form_obj.username.id_for_label }}"
                               class="col-sm-2 control-label">{{ form_obj.username.label }}</label>
                        <div class="col-sm-8">
                            {{ form_obj.username }}
                            <span class="help-block">{{ form_obj.username.errors.0 }}</span>
                        </div>
                    </div>
    
                    <div class="form-group">
                        <label for="{{ form_obj.password.id_for_label }}"
                               class="col-sm-2 control-label">{{ form_obj.password.label }}</label>
                        <div class="col-sm-8">
                            {{ form_obj.password }}
                            <span class="help-block">{{ form_obj.password.errors.0 }}</span>
                        </div>
                    </div>
    
                    <div class="form-group">
                        <label for="{{ form_obj.re_password.id_for_label }}"
                               class="col-sm-2 control-label">{{ form_obj.re_password.label }}</label>
                        <div class="col-sm-8">
                            {{ form_obj.re_password }}
                            <span class="help-block">{{ form_obj.re_password.errors.0 }}</span>
                        </div>
                    </div>
    
                    <div class="form-group">
                        <label for="{{ form_obj.email.id_for_label }}"
                               class="col-sm-2 control-label">{{ form_obj.email.label }}</label>
                        <div class="col-sm-8">
                            {{ form_obj.email }}
                            <span class="help-block">{{ form_obj.email.errors.0 }}</span>
                        </div>
                    </div>
    
                    <div class="form-group">
                        <label
                                class="col-sm-2 control-label">头像</label>
                        <div class="col-sm-8">
                            <label for="id_avatar"><img id="avatar-img" src="/static/img/default.png" alt=""></label>
                            <input accept="image/*" type="file" name="avatar" id="id_avatar" style="display: none">
                            <span class="help-block"></span>
                        </div>
                    </div>
    
                    <div class="form-group">
                        <div class="col-sm-offset-2 col-sm-10">
                            <button type="button" class="btn btn-success" id="reg-submit">注册</button>
                        </div>
                    </div>
                </form>

    html 中的form 请求的js代码(Ajax请求)

    <script src="/static/jquery-3.3.1.js"></script>
    <script src="/static/bootstrap/js/bootstrap.min.js"></script>
    <script>
        // 找到头像的input标签绑定change事件
        $("#id_avatar").change(function () {
            // 1. 创建一个读取文件的对象
            var fileReader = new FileReader();
            // 取到当前选中的头像文件
            // console.log(this.files[0]);
            // 读取你选中的那个文件
            fileReader.readAsDataURL(this.files[0]);  // 读取文件是需要时间的
            fileReader.onload = function () {
                // 2. 等上一步读完文件之后才 把图片加载到img标签中
                $("#avatar-img").attr("src", fileReader.result);
            };
        });
        // AJAX提交注册的数据
        $("#reg-submit").click(function () {
            // 取到用户填写的注册数据,向后端发送AJAX请求
            var formData = new FormData();
            formData.append("username", $("#id_username").val());
            formData.append("password", $("#id_password").val());
            formData.append("re_password", $("#id_re_password").val());
            formData.append("email", $("#id_email").val());
            formData.append("avatar", $("#id_avatar")[0].files[0]);
            formData.append("csrfmiddlewaretoken", $("[name='csrfmiddlewaretoken']").val());
    
            $.ajax({
                url: "/reg/",
                type: "post",
                // Ajax传文件数据 需要加入下面两个参数
                processData: false,
                contentType: false,
                data: formData,
                success:function (data) {
                    if (data.status){
                        // 有错误就展示错误
                        // console.log(data.msg);
                        // 将报错信息填写到页面上
                        $.each(data.msg, function (k,v) {
                            // console.log("id_"+k, v[0]);
                            // console.log($("#id_"+k));
                            $("#id_"+k).next("span").text(v[0]).parent().parent().addClass("has-error");
                        })
    
                    }else {
                        // 没有错误就跳转到指定页面
                        location.href = data.msg;
                    }
                }
            })
        });
    
        // 将所有的input框绑定获取焦点的事件,将所有的错误信息清空
        $("form input").focus(function () {
            $(this).next().text("").parent().parent().removeClass("has-error");
        })
    </script>

    2018-9-28 17:52:17 

    晚上继续迭代一下!

  • 相关阅读:
    【流媒体】Nginx+nginxhttpflvmodule流媒体+鉴权
    【Linux】Tess4j识别pdf报错libgs.so无法加载
    【Java】tess4j文字识别
    【Spring专场】「MVC容器」不看源码就带你认识核心流程以及运作原理
    【Spring专场】「AOP容器」不看源码就带你认识核心流程以及运作原理
    【Spring专场】「IOC容器」不看源码就带你认识核心流程以及运作原理
    【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—CuratorFramework(基础篇)
    🍃【Spring专题】「技术原理」为大家介绍一下Spring中的Ant路径匹配工具组件AntPathMatcher
    Wireshark安装入门及抓取网站用户名密码
    手把手教你用 wireshark 抓包
  • 原文地址:https://www.cnblogs.com/zhen1996/p/9720025.html
Copyright © 2020-2023  润新知