实习一个月了,感觉后半段效率低下,心里毛躁,现在在这里总结一下,沉沉心
django:
MVC模式,模型视图控制器模型
这是一个项目的树形结构
├── log
├── manage.py
├── property_msg
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-34.pyc
│ │ ├── settings.cpython-34.pyc
│ │ ├── urls.cpython-34.pyc
│ │ └── wsgi.cpython-34.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── reptile
│ ├── 1.html
│ ├── admin.py
│ ├── back.py
│ ├── base.sh
│ ├── change.json
│ ├── change.py
│ ├── house.py
│ ├── __init__.py
│ ├── log
│ ├── log.err
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_ip_pool.py
│ │ ├── 0003_auto_20160728_1603.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-34.pyc
│ │ ├── 0002_ip_pool.cpython-34.pyc
│ │ ├── 0003_auto_20160728_1603.cpython-34.pyc
│ │ └── __init__.cpython-34.pyc
│ ├── models.py
│ ├── proxy
│ ├── proxy.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ ├── models.cpython-34.pyc
│ │ ├── reptile.cpython-34.pyc
│ │ ├── urls.cpython-34.pyc
│ │ └── views.cpython-34.pyc
│ ├── runing.py
│ ├── sql.py
│ ├── templates
│ │ └── index.html
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── reptile_housemsg.sql
└── templates
└── admin
└── base_site.html
模型层:
这个用的不少
class myModel(models.Model):
我的字段 = models.CharField(max_length = 10);
......
这就声明了一个数据库的表
然后
python3 manage.py makemigrations
创建建表代码
python3 manage.py migrate
在数据库里面执行建表代码
执行完数据库里面对应的表就有了
查询
a = myModel.objects.filter(asd = 1);
相当 select * from mytable where asd = 1;
写在脚本里面可字符串切片
filter是获取一个查询子集,可以继续筛选的,这个在没真正获取数据的时候是没有查询数据库的
是根据最终的查询来生成一个sql语句交给数据库执行
QuerySet 这个是那个查询对象集,可迭代
myModel.objects.raw('sql 语句');
返回一个rawQuerySet ,用法差不多,不过不能继续分查询子集
a.delete() 删除
删除后二次切片索引向前移动,很蛋疼的玩意,下次写删除从后往前写
a = myModel(x = 1 ,y = 2);
a.save(); #插入
a = myModel.objects.get(pk = 1);
a.x = 1;
a.save(); #修改
这些是对数据库操作的,
setting mysql 配置:
DATABASES = {
79 'default': {
80 'ENGINE' : 'mysql.connector.django',
81 'NAME' : 'house',
82 'USER' : 'root',
83 'PASSWORD' : 'rootPasswd',
84 'HOST' : 'localhost',
85 'PORT' : '3306',
86 'OPTIONS' : {
87 'autocommit' : True,
88 },
89 }
这是对安装了mysql。connector的玩法,
79 'default': {
80 'ENGINE' : 'django.db.backends.mysql',
81 'NAME' : 'house',
82 'USER' : 'root',
83 'PASSWORD' : 'rootPasswd',
84 'HOST' : 'localhost',
85 'PORT' : '3306',
86 'OPTIONS': {
87 'autocommit': True,
88 },
89 }
90 }
这是安装了pymysql的写法,要在setting 同目录下的__init__.py里面加上:
import pymysql
pymysql.install_as_MySQLdb()
视图:
Request
Response
这两个货的概念是这样的:
request 是用户请求你服务器的玩意的,里面有他的请求的信息,
Response 根据请求,然后按你的逻辑返回给请求这个url的用户一个html返回结果
HttpResponseRedirect 跳转
HttpResponse 返回一个response对象,可以由字符串构造就是html码
HttpResponseNotFound 很显然是not found
render(请求对象 , '模板路径' , context{这个是模板变量与字符串的映射关系,以字典给出}) 和模板融合
python 外部脚本调用django models:
import sys , os;
sys.path.append('/home/adc/property_msg/')
os.environ['DJANGO_SETTINGS_MODULE']='property_msg.settings'
import django;
django.setup();
暂时还不知道为啥这么写,反正这么写就能调用了。。。。。
爬虫可以用django的models还是很爽的,节省了操作数据库的代码,不过集成高了出了问题解决就是有些困难
目前未解决的问题:
django的mysql connector 线程多了就显示mysql太多连接了,就拒绝写数据库,只能保持几十个线程跑,还是等一单线程的主线程爬页码
这样效率很低,一个我爱我家的爬虫竟然跑了一下午,速度简直不能忍
链家的爬虫检查ip访问量,挂代理现在没有可用的好代理,除非自己花钱买,而且代理还会有其他我没接触过的东西来等着我
django admin 中文mysql 上需要加上二进制检索,然而如此集成我很难修改,这就是用框架的弊端了吧
admin的集成的东西想改动得废很多功夫,还不如自己写我感觉,但又不太想看js 和 css的东西很毛躁啊
现在需要好好规划一下自己了,到底怎么搞才能成长快,这些就是一个月总结,虽然150行但是效率远远不够,还没能写出东西。