zoukankan      html  css  js  c++  java
  • django开发 常见问题及解决方案记录(持续更新)

    一、如果是a标签的href 或者form表单提交 这种会触发页面刷新的情况,后端函数都可以直接让用户重定向。但是如果是异步请求$.get() 则不可以。**

    第一种情况href+HttpResponseRedirect

    欢迎你: <span>{{ username }}</span>&nbsp;<a href="/logout/"  style="color: #b097b5;text-decoration: none"> 退出 </a>
    
    def logout(request):
    	auth.logout(request)
    	return HttpResponseRedirect('/login/')
    

    第二种情况使用jquery的$.get()发起,这种方法需要引入jquery

    <script src="/static/201908059658/js/jquery-1.11.0.min.js" type="text/javascript"></script>
    

    $.get("你的url",{json格式参数},function (ret接收后端的返回值){收到返回值后可以做的事})

    这样发起的请求,后端需要返回True,False, 0,1,成功,失败这种字符串,也就是说这个时候后端如果还用HttpResponseRedirect重定向是无效的。示例代码如下:

        function login(){
            username = document.getElementById('username').value;
            password = document.getElementById('password').value;
            $.get("/login_action/",{
                "username":username,
                "password":password
            },function (ret){
                if(ret == '成功'){
                    document.location.href = '/home/'
                }else{
                    alert('您的用户名或密码错误!')
                }
            })
        }
    
    def login_action(request):
    	username = request.GET.get('username', '')
    	password = request.GET.get('password', '')
    	user = auth.authenticate(username=username, password=password)
    	# 用户名和密码在数据库有查到,那么进行验证
    	if user is not None:
    		auth.login(request, user)
    		request.session['user'] = username
    		return HttpResponse('成功')
    	else:
    		return HttpResponse('失败')
    

    二、在html发起请求有四个方式,第一个是直接写js函数,然后在元素标签通过onclick、submit、href这样的属性来调用,第二个是直接在标签内通过onclick写js语句,第三个是form表单提交,form的action,method+button的type="submit",第四个是a标签的href="/logout/"

    第一种的代码示例

    <button type="submit" onclick="login()" style="">登 录</button>
    
    <scripts>
        function login(){
            username = document.getElementById('username').value;
            password = document.getElementById('password').value;
            $.get("/login_action/",{
                "username":username,
                "password":password
            },function (ret){
                if(ret == '成功'){
                    document.location.href = '/home/'
                }else{
                    alert('您的用户名或密码错误!')
                }
            })
        }
    </scripts>
    

    第二种,示例代码

    <span style="font-size: small;color: grey;">点击
        <a href="#" onclick="javascript:document.getElementById('add_project_div').style.display='block'">新增项目</a>
                即可创建属于您的新项目!
    </span>
    

    这样写就等于下面这样

    <span style="font-size: small;color: grey;">点击
        <a href="#" onclick="javascript:add_project()">新增项目</a>
                即可创建属于您的新项目!
    </span>
    
    function add_project(){			                 
    	document.getElementById('add_project_div').style.
    display='block'
    }
    

    第三种,

      <form action="/goLogin/" method="post">
        <div id="fade-box">
          <input type="text" name="username" id="username" placeholder="Username" required>
            <input type="password" name="password" placeholder="Password" required>
              <button type="submit">Log In</button>
        </div>
      </form>
    

    第四种,适用退出登录这种,不需要参数的

    <a href="/logout/">登出</a>
    

    三、jQuery.inArray()方法

        <script>
            if("{{ project.global_datas }}" != "None" && "{{ project.global_datas }}" != ""){
                if($.inArray("{{ i.id }}","{{ project.global_datas }}".split(',')) != -1){
                    document.getElementById("check_{{ i.id }}").checked = "checked"
                }
            }
        </script>
    

    $.inArray() 函数用于在数组中查找指定值,并返回它的索引值(如果没有找到,则返回-1)

    提示:源数组不会受到影响,过滤结果只反映在返回的结果数组中。

    语法

    $.inArray( value, array [, fromIndex ] )
    

    其他的

    <body>
    
    <div>"John" 在索引值为 <span></span> 的位置被找到</div>
    <div>4 在索引值为 <span></span> 的位置被找到</div>
    <div>"Karl" 未被找到,所以返回 <span></span> </div>
    <div>"Pete" 在数组中,但是不在索引值大于等于2的位置,所以返回 <span></span></div> 
    <script>
    $(function () { 
    	var arr = [ 4, "Pete", 8, "John" ];
    	var $spans = $( "span" );
    	$spans.eq( 0 ).text( jQuery.inArray( "John", arr ) );
    	$spans.eq( 1 ).text( jQuery.inArray( 4, arr ) );
    	$spans.eq( 2 ).text( jQuery.inArray( "Karl", arr ) );
    	$spans.eq( 3 ).text( jQuery.inArray( "Pete", arr, 2 ) );
    })
    </script>
     
    </body>
    

    四、javascript

    s.charCodeAt(x)

    输出字符串s的索引x对应的元素的ascii码

    var s = "HELLO WORLD";
    undefined
    s.charCodeAt(0)
    72
    s.charCodeAt(1)
    69
    

    **s.charAt(x) **

    输出字符串s的索引x对应的元素

    s = "hello world"
    "hello world"
    
    s.charAt(0)
    "h"
    
    s.charAt(3)
    "l"
    

    s.toUpperCase()

    字符串s全体转换成大写

    "ac fed Adsdsd".toUpperCase()
    "AC FED ADSDSD"
    

    s.slice(x)

    输出字符串s切割掉索引x对应的元素后,s剩余的字符串,索引x从1开始,0是字符串完整本身

    s = "runoob"
    "runoob"
    
    s.slice(0)
    "runoob"
    
    s.slice(1)
    "unoob"
    
    s.slice(1)
    "unoob"
    

    五、a标签里href="/logout/"和href="logout/"的区别

    欢迎你: <span>{{ username }}</span>&nbsp;<a href="/logout/"  style="color: #b097b5;text-decoration: none"> 退出 </a>
    

    /logout/:绝对路径,代表从域名开始拼/logout/,点击后跳转的链接是host/logout/。

    logout/ :相对路径,代表从当前路径开始拼上logout/,比如当前页面url是127.0.0.1:8000/home,那么点击后跳转的链接是host/home/logout/。

    那又有人说我直接在url写在href里可以不可以?

    答案是:当然可以。但是这里跟前面两个的效果都不一样,点击后的会直接跳转href的完整url,本地当前的域名也会被替掉,比如href="https://www.baidu.com",点击后会直接跳转到百度,跟当前域名就没关系。

    六、新建django项目常用操作记录,以免遗忘

    创建项目:django-admin startproject 项目名

    创建应用:进入项目后,django-admin startapp 应用名

    同步/生效表结构:在项目根目录下,python3 manage.py makemigrations 和 python3 manage.py migrate

    创建后台超级管理员:在项目根目录下,python3 manage.py createsuperuser 然后输入用户名/邮箱/密码等

    启动项目

    六、html中引入html,extends和include

    作为一个组件页面,嵌入到一个主页面,不影响主页面的DOM展示

    {% include "menu.html" %}
    

    menu.html会直接覆盖掉原html整个页面,也就是说这样引入后,只会展示menu的内容

    {% extends "menu.html" %}
    

    七、form表单输入的数据存储以及view中接口获取前端输入的数据

    html

    <form action="/login/" method="post">
        <div id="fade-box">
            <input type="text" name="username" id="username" placeholder="Username" required>
            <input type="password" name="password" placeholder="Password" required>
            <button type="submit">Log In</button>
        </div>
    </form>
    

    view

    def login(request):
    	username = request.POST.get('username',None)
    	password = request.POST.get('password',None)
    	print(username,password)
    

    name="username" ,这里的username是一个变量名,用来代表input标签中输入的数据,而输入的数据值存在value,value属性默认不显示,我们写html时可写可不写,可以通过dom元素.value()来获取值。

    request.POST.get('username',None)这里的username就是要get的变量名,与input标签的name属性对应的值是一一对应的关系,否则就会取不到值。

    八、登录成功,页面跳转的三个实现方式

    def login(request):
    	username = request.POST.get('username',None)
    	password = request.POST.get('password',None)
    	print(username,password)
    	user = auth.authenticate(username=username,password=password)
    	print(type(user))
    	if not user :
    		# user如果是None,说明用户不存在,跳转到登录页面
    		return HttpResponseRedirect('/login/') # 重定向
    		# return render(request,'login.html',{}) # 照抄使用登录页面的返回(不建议使用)
    		# return loginPage(request) # 调用当前模块的登录页面函数
    	# user如果有值,说明用户存在,进行登录
    	auth.login(request,user)
    	# 登录成功,种cookie
    	request.session['user'] = username
    	# 最后跳转到home主页
    	return HttpResponseRedirect('/home/')
    
    更多学习笔记移步 https://www.cnblogs.com/kknote
  • 相关阅读:
    新手入门:python的pip安装(二)
    新手入门:python的安装(一)
    python解释器和环境安装
    Python基础入门总结
    Python环境搭建教程(windows10)
    漏洞重温之sql注入(三)
    漏洞重温之sql注入(二)
    漏洞重温之sql注入(一)
    漏洞重温之文件上传(FUZZ)
    漏洞重温之文件上传(总结)
  • 原文地址:https://www.cnblogs.com/kknote/p/15627083.html
Copyright © 2011-2022 走看看