Django使用体验

Django写起来确实很清晰,分层思路太好用咯,虽然没有系统的学过怎么写规范,但自己摸索就能找到合适的方法,本来是打算写成前后端分离的方式,因为我比较喜欢VUE的数据双向绑定和axios的后端交互,结果django自带了类似于vue的用法,真是太棒了,配合layui xadmin,很轻松就能写一个管理系统。另外,很喜欢Django ORM的使用方式,简单好用功能强大,可惜是绑定Django使用的,别的地方不推荐使用。可是为什么刷新表的绑定不能在开始运行就去做而非要通过我手动使用manage.py呢?emmm

但是吧,还是出了很多各种各样的问题的,比如迅雷的Chrome插件会导致一些错误的产生,以及老生常谈的中文编码问题,可以说写一路就遇到一路的问题,百度也很难找到契合的答案,往往我需要的问题刚好有一篇解答,而且关键词还十分难想。。。。

首先Reverse for ‘xxx’ not found. ‘xxx’ is not a valid view function or pattern name这个问题,网上的回答有一半都不明所以,最后也是靠比较配置文件看出来的。解决方法是,比如

path('index/', views.index)
用render是没问题的,但redirect就出问题了
是需要设置name,也就是
path('index/', views.index, name="index")
然后就可以了
好像还有
django urls.exceptions.NoReverseMatch
之类的,有可能是因为比如你要请求/index/,但前端写的时候是/index
就是说末尾没有/它也会找不到路由

然后是csrf跨域问题,一般如果是form表单,可以写一个

{% csrf_token %}
来解决,大家都知道w
但是如果是使用ajax进行post请求,就会出现跨域拦截, Forbidden (CSRF token missing or incorrect.)
并且用上面的代码并没有什么用,甚至会有新的报错,好像是<这个符号会导致出错
然后网上的教程都是让把
csrfmiddlewaretoken: '{{ csrf_token }}'给设置到ajax的什么初始设置的data里
我试了一下,首先必须写在引用jquery的后面才能不报错,其次这样做并没有什么用,仍旧报错
我最后的解决方法是在ajax发送的data中加入以上的代码,才解决了这个问题

然后是在views.py中,我想弄那种前后端分离时请求接口返回json

reuse = {"code": 403, 'message': '非法访问'}
return HttpResponse(json.dumps(reuse))
打个比方说像这样,结果呢,浏览器收到的中文部分全是gbk编码,像是%E3%B4之类的东西,后端decode也没用
解决方法就是
reuse = {"code": 403, 'message': '非法访问'}
return HttpResponse(json.dumps(reuse, ensure_ascii=False))
在后面加上那一段东西,我从未想过还有这样的编码问题害

另外我前端采用iframe框架,然后呢,这个django


Refused to display ‘http://127.0.0.1:8000/console’ in a frame because it set ‘X-Frame-Options’ to ‘DENY’.

我麻了,好像是防止iframe劫持的一个操作

MIDDLEWARE = [
      …
      ‘django.middleware.clickjacking.XFrameOptionsMiddleware’,
     …
]

默认有这么一个设置,然后就是要在settings.py里添加

X_FRAME_OPTIONS = ‘SAMEORIGIN’

 

其实还有大大小小的很多奇怪问题,不过我感觉解决方法很好找就不一一罗列了。暂时就写这些,有空再更新吧hhh