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
  • 相关阅读:
    tar命令,vi编辑器
    Linux命令、权限
    Color Transfer between Images code实现
    利用Eclipse使用Java OpenCV(Using OpenCV Java with Eclipse)
    Matrix Factorization SVD 矩阵分解
    ZOJ Problem Set
    Machine Learning
    ZOJ Problem Set
    ZOJ Problem Set
    ZOJ Problem Set
  • 原文地址:https://www.cnblogs.com/kknote/p/15627083.html
Copyright © 2011-2022 走看看