这里是getElementByTagName("div")=============单复数的问题,给element加上s就可以了,仅仅是一个"s"的问题,把s加上就可以解决了.
在js中我们要想改变属性的值,在console里面可以直接操作,在改变之前我们需要找到标签,然后才能改,在找标签的过程中我们需要找到具体的标签进行修改,不能找到一个标签数组去改
egon 博客练习题: http://www.cnblogs.com/linhaifeng/articles/7267596.html#_label5
第24题:
这里的in出错了,在mysql里面暂时还不支持limit里面有子查询的in/all/any/some方法
在html文档中,使用bootstrap工具的时候,遇到的问题:
这里是出错的部分,用红色圈出来了
这里是已经改正过了的,注意细节,两张图片对比出来就是一个空格的问题,就差在一个空格上
在django项目里面我们的函数体,跟数据库连接的时候,报错,这里的原因是比较简单的,把相关的代码缩进到for循环里面即可,一个tab键就可以搞定的,下面的变量预警是因为他们是在for循环里面被定义的,然后我们却在for循环外面使用它了,局部命名空间的变量是不能够被全局所使用的,这里是命名空间的部分出错了
这里是HTML标签里面的属性有缺失导致页面无法显示出预期的效果
这里这张图的重点是method="post",我们的form表单里面需要进行一些增删改查的操作固定要有这个method这个属性,并且要根据不同的动作有不同的改变,
模态框的标签是需要写作body的直系子标签的,要紧贴着,不能够有间隙,隔一层都不可以,
如图所示,位置没有关系,放到前面或者后面或者中间都可以的,只要紧贴着body即可,也就是我们模态框最外层的那个div标签需要贴着左边的代码框,贴着,即可
这里我们我的开始符号和结束符号位置需要和我们的/对应上,结束符放到我们的/外面然后再''的里面
这里我们的引号里面,不能够加上/不能够加上/,不能够加上/, 就如图下所示,按照下面的图片写即可
这里我们的get和filter得到的数据类型是不一样的,get是得到一个对象,而我们的filter是得到一个列表,列表取值是需要使用索引的 ,而我们的对象是可以直接去取值的
django项目里面的标点符号问题,如果没有给我们提示的话我们就不要擅自加上空格了
这里的报错是我们的django项目里面csrf中间件的问题:
解决办法:
我们的django项目里面,使用orm的时候,在python console里面,查询的时候要想显示sql语句要设置logging,然后在python console里面我们就可以得到查询的SQL语句了,
这里的logging参数配置里面的version参数需要使用小写,如果是大写的"VERSION"的话就会报错,我们的django项目都无法运行
我们找bug的时候要按照顺序来一层一层分析,先从url开始入手,然后到views函数,再到前端模板,按照顺序过一遍,不要死盯着一处去看,要着眼于多处,才有更多可能去发现问题,我们要一步一步去分析报错的原因,才能找到根源,而不是陷在一个地方,思维方式还是很重要的,否则就是过分的浪费时间,
路由系统:
url(r'^selog/', include(seurl)), # 这里是路由分发 # 这是子路由 from django.conf.urls import url from session import views as sesviews urlpatterns = [ url(r"^login/", sesviews.login, name='sesslogin'), # url(r'^home/$', sesviews.home, name='home'), url(r'^home/$', sesviews.home, name='home'), url(r"^index/$", sesviews.index, name='index'), url(r'^logout/$', sesviews.logout, name='logout'), url(r'^gettest/$', sesviews.gettest,), url(r'^login3/$', sesviews.LoginView.as_view()), url(r'^index3/$', sesviews.IndexView.as_view()), url(r'^login2/$', sesviews.login2,), url(r'^index2/$', sesviews.index2,), ]
视图函数:
from django.shortcuts import render, HttpResponse, redirect from functools import wraps from django.urls import reverse # Create your views here. # 简单的原始版装饰器 def wrapper(func): @wraps(func) def inner(request, *args, **kwargs): cookie_k = request.get_signed_cookie('who', None, salt='s8',max_age=5) # 我们这里的参数who设置的它,后面获取的时候也是要通过它去获取,否则参数匹配不上
# 页面是无法出来效果的 print(11111, cookie_k) if cookie_k: # 如果我们检测到有cookie,就证明是我们自己的用户, # ret = func(request, *args, **kwargs) ret = func(request, *args, **kwargs) return ret else: # 反之,如果没有检测到,就不是我们的用户,需要登录或者注册 # return redirect('sebog/login/') next_url = request.get_full_path() print(next_url,"-------") return redirect('/selog/login/?next={}'.format(next_url)) # 我们这里是路由分发的,所以需要在url里面加上前缀否则是无法得到地址的 return inner #http://127.0.0.1:8000/selog/login/?next=home def login(request): if request.method == 'POST': user = request.POST.get("user") pwd = request.POST.get('pwd') if user == 'alex' and pwd == "123": next_url = request.GET.get('next', None) print(next_url) if next_url: rep = redirect(next_url) else: # rep = redirect(reverse('index')) rep = redirect('/selog/index/') # return redirect('home') rep.set_signed_cookie('who', user, salt='s8') # 我们的cookie失效时间不能太短了,否则我们还没有把url输入到浏览器cookie就已经失效了 return rep return render(request, 'session/login.html') def logout(request): rep = redirect(reverse('sesslogin')) rep.delete_cookie('who') return rep @wrapper def index(request): cookie_k = request.get_signed_cookie('who', None, salt='s8') if cookie_k: # return redirect(reverse('sesslogin')) return render(request, 'session/index.html') else: return redirect(reverse('sesslogin')) # return render(request, 'session/index.html') @wrapper def home(request): return render(request, 'session/home.html') @wrapper def gettest(request): print(request.GET.get('next')) return HttpResponse('OK')
前端模板:
home
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> </head> <body> <h1>welcome home</h1> <button type="submit" value="put on"><a href="{% url 'logout' %}">quit</a></button> </body> </html>
index:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> </head> <body> <h1>there is index page</h1> <button type="submit" value="put on"><a href="{% url 'logout' %}">quit</a></button> </body> </html>
login:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> </head> <body> <form action="{{ request.get_full_path }}" method="post"> {#<form action="/login/" method="post">#} {#<form action="{% url 'sesslogin' %}" method="post">#} {% csrf_token %} <input type="text" name="user" placeholder="user"> <input type="password" name="pwd" placeholder="pwd"> <input type="submit" value="put in"> </form> </body> </html>
我们的console里面的500错误:
这个场景是在我们的flask里面的redis连接池里写投票系统遇到的bug
redis.exceptions.ResponseError: WRONGTYPE Operation against a key holding the wrong kind of value
这里是中文翻译:
[redis.exceptions.ResponseError:WRONGTYPE针对持有错误类型值的键的操作]
我们的这个键hell在redis里面已经做为其他的数据的键了,就不能再被重用了,换一个键的名字即可(会出现这个原因是因为我一开始用的redis,然后又在原有基础上进行了redis连接池的转换,所以我们的代码块都没有变,那么就是我们的redis里面的lpush里面的键是重复了,所以就会报这个错,)
{原来的redis里面的key对应的数据类型不一致,key对应的数据类型一致的话,是可以插入的}
ajax报错:“parsererror”
这里是解析错误,后端传过来的数据没有做格式处理才会这样,需要去后端看最后返回的数据格式跟ajax里面的数据格式是否匹配,我这里ajax是用的json数据类型,后端传的是字符串没有做json。dump()的处理,我把字符串进行了dump之后就可以正常调用前端ajax的success函数了。
执行pip install pipreqs报错:
error: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/docopt.py'
是权限不够,被拒绝下载,我在命令前加上了sudo 就可以了,
即:
sudo pip install pipreqs
(报错信息很长一大串,我一时心急就把一大串都粘到搜索框去搜,结果肯定是搜不出来啊,后来慢慢理出头绪,找到了error这一行,以后遇到报错,要能分辨哪里是核心点,这样就会省很多力气,找到突破口快速解决问题)
Can't connect to local MySQL server through socket '/tmp/mysql.sock'
mysql预警信息解决方案:
查看mysql进程:
ps -A|grep mysql
重启mysql:
/etc/init.d/mysql restart
进入mysql:
mysql -uroot -p
mysql预警信息:
TIMESTAMP with implicit DEFAULT value is deprecated
在mysql配置文件中增加一条配置项即可解除预警:
cd /usr/local/mysql/data/ # 要找到自己的配置文件路径,我自己是放到这里的。
vim my.cnf
在[mysqld]下添加一行
explicit_defaults_for_timestamp=true
就可以了。
python3.6 + Django2.1 + ajax
排错了一整天,没有遇到过这样的错误,连把错误信息拿到网上都搜不到一星半点线索。。。。。。
一开始自己一个人写前后端,出现跨域,然后在中间件里面加上了请求头信息
['Access-Control-Allow-Origin'] = '*'
["Access-Control-Allow-Methods"] = "POST,GET,OPTION,PUT,DELETE,PATCH"
与此同时,前端没怎么写过,就连ajax的路由写法都是现查的,然后就随便找了一篇博客没有细看,粗暴的写成了这样:“http://127.0.0.1:8000/login/”
然后在本地测试的时候,一切如常,于是推到服务器的时候,就开始报错,报同样的错,如下贴出,
报错信息如下:
[DEBUG][2019-03-28 15:13:47,575][base.py:872]Exception while resolving variable 'name' in template 'unknown'.
Traceback (most recent call last): File "/root/.virtualenvs/dream_envir/lib/python3.5/site-packages/django/template/base.py", line 829, in _resolve_lookup current = current[bit] TypeError: 'URLResolver' object is not subscriptable During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/root/.virtualenvs/dream_envir/lib/python3.5/site-packages/django/template/base.py", line 837, in _resolve_lookup current = getattr(current, bit) AttributeError: 'URLResolver' object has no attribute 'name' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/root/.virtualenvs/dream_envir/lib/python3.5/site-packages/django/template/base.py", line 843, in _resolve_lookup current = current[int(bit)] ValueError: invalid literal for int() with base 10: 'name' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/root/.virtualenvs/dream_envir/lib/python3.5/site-packages/django/template/base.py", line 850, in _resolve_lookup (bit, current)) # missing attribute django.template.base.VariableDoesNotExist: Failed lookup for key [name] in <URLResolver <URLPattern list> (admin:admin) 'admin/'>
上面有关键字信息可以捕捉到,admin,URL,
一开始测试的时候就没有考虑admin,也没有想过URL会有问题,于是一直很困惑问题出在哪里,本地和线上测试结果差太多,一直以为是线上环境的其他细节有问题,于是耽误了大把的时间。
仔细查过了Django2.0以及ajax的URL路由写法,发现ajax路由写死了,所以线上报错;
试过了admin无法打开页面,也是报上面同样的错,把上面处理跨域的中间件注释掉用另一个方式解决跨域。问题就解决啦啦啦
mongo 服务启动报错:
用命令:mongod
错误信息如下:
2019-04-08T17:26:11.722+0800 I CONTROL [initandlisten] MongoDB starting : pid=6463 port=27017 dbpath=/data/db 64-bit host=dream-macdeMBP.lan 2019-04-08T17:26:11.726+0800 I CONTROL [initandlisten] db version v3.4.2 2019-04-08T17:26:11.726+0800 I CONTROL [initandlisten] git version: 3f76e40c105fc223b3e5aac3e20dcd026b83b38b 2019-04-08T17:26:11.726+0800 I CONTROL [initandlisten] allocator: system 2019-04-08T17:26:11.726+0800 I CONTROL [initandlisten] modules: none 2019-04-08T17:26:11.726+0800 I CONTROL [initandlisten] build environment: 2019-04-08T17:26:11.726+0800 I CONTROL [initandlisten] distarch: x86_64 2019-04-08T17:26:11.726+0800 I CONTROL [initandlisten] target_arch: x86_64 2019-04-08T17:26:11.727+0800 I CONTROL [initandlisten] options: {} 2019-04-08T17:26:11.728+0800 I - [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'. 2019-04-08T17:26:11.728+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=3584M,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0), 2019-04-08T17:26:11.735+0800 E STORAGE [initandlisten] WiredTiger error (13) [1554715571:735657][6463:0x1144e05c0], file:WiredTiger.wt, connection: /data/db/WiredTiger.turtle: handle-open: open: Permission denied 2019-04-08T17:26:11.751+0800 I - [initandlisten] Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267 2019-04-08T17:26:11.753+0800 I STORAGE [initandlisten] exception in initAndListen: 28595 13: Permission denied, terminating 2019-04-08T17:26:11.753+0800 I NETWORK [initandlisten] shutdown: going to close listening sockets... 2019-04-08T17:26:11.753+0800 I NETWORK [initandlisten] removing socket file: /tmp/mongodb-27017.sock 2019-04-08T17:26:11.753+0800 I NETWORK [initandlisten] shutdown: going to flush diaglog... 2019-04-08T17:26:11.753+0800 I CONTROL [initandlisten] now exiting 2019-04-08T17:26:11.753+0800 I CONTROL [initandlisten] shutting down with code:100
用命令: mongo
错误如下:
MongoDB shell version v3.4.2 connecting to: mongodb://127.0.0.1:27017 2019-04-08T17:26:54.606+0800 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused 2019-04-08T17:26:54.609+0800 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed : connect@src/mongo/shell/mongo.js:237:13 @(connect):1:6 exception: connect failed
解决方法:
进入mongo安装目录:
cd /usr/local/mongodb/bin/
执行命令:
sudo ./mongod
如下提示:
Password: 2019-04-08T18:26:09.128+0800 I CONTROL [initandlisten] MongoDB starting : pid=6693 port=27017 dbpath=/data/db 64-bit host=dream-macdeMBP.lan 2019-04-08T18:26:09.128+0800 I CONTROL [initandlisten] db version v3.4.2 2019-04-08T18:26:09.128+0800 I CONTROL [initandlisten] git version: 3f76e40c105fc223b3e5aac3e20dcd026b83b38b 2019-04-08T18:26:09.128+0800 I CONTROL [initandlisten] allocator: system 2019-04-08T18:26:09.128+0800 I CONTROL [initandlisten] modules: none 2019-04-08T18:26:09.128+0800 I CONTROL [initandlisten] build environment: 2019-04-08T18:26:09.128+0800 I CONTROL [initandlisten] distarch: x86_64 2019-04-08T18:26:09.128+0800 I CONTROL [initandlisten] target_arch: x86_64 2019-04-08T18:26:09.128+0800 I CONTROL [initandlisten] options: {} 2019-04-08T18:26:09.129+0800 I - [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'. 2019-04-08T18:26:09.129+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=3584M,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0), 2019-04-08T18:26:09.411+0800 I CONTROL [initandlisten] 2019-04-08T18:26:09.411+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2019-04-08T18:26:09.411+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2019-04-08T18:26:09.411+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended. 2019-04-08T18:26:09.411+0800 I CONTROL [initandlisten] 2019-04-08T18:26:09.420+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data' 2019-04-08T18:26:09.420+0800 I NETWORK [thread1] waiting for connections on port 27017 2019-04-08T18:26:46.084+0800 I NETWORK [thread1] connection accepted from 127.0.0.1:57474 #1 (1 connection now open)
出现字样
“
waiting for connections on port 27017
”
即是服务启动了,查看进程可以看到mongo进程
ps -ef|grep mongod
0 6692 2600 0 6:26PM ttys001 0:00.06 sudo ./mongod
0 6693 6692 0 6:26PM ttys001 0:00.41 ./mongod
501 6705 5153 0 6:26PM ttys002 0:00.01 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn mongod
然后再开一个窗口,进入mongo
mongo # 这行命令是安装mongo的时候把环境配置好了,才能执行它
MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.2
Server has startup warnings:
2019-04-08T18:26:09.411+0800 I CONTROL [initandlisten]
2019-04-08T18:26:09.411+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-04-08T18:26:09.411+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2019-04-08T18:26:09.411+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2019-04-08T18:26:09.411+0800 I CONTROL [initandlisten]
> use test
switched to db test
...................持续更新中.................................