首页
登录
搜索
登录
搜索
emer
累计撰写
197
篇文章
累计收到
496
条评论
首页
栏目
首页
登录
自定义幻灯片
最新文章
2019-10-25
Django中的SESSION操作
# 获取、设置、删除Session中数据 request.session['k1'] request.session.get('k1',None) request.session['k1'] = 123 request.session.setdefault('k1',123) # 存在则不设置 del request.session['k1'] # 所有 键、值、键值对 request.session.keys() request.session.values() request.session.items() request.session.iterkeys() request.session.itervalues() request.session.iteritems() # 会话session的key request.session.session_key # 将所有Session失效日期小于当前日期的数据删除 request.session.clear_expired() # 检查会话session的key在数据库中是否存在 request.session.exists("session_key") # 删除当前会话的所有Session数据 request.session.delete() # 删除当前的会话数据并删除会话的Cookie。 推荐使用**** request.session.flush() 这用于确保前面的会话数据不可以再次被用户的浏览器访问 例如,django.contrib.auth.logout() 函数中就会调用它。 # 设置会话Session和Cookie的超时时间 request.session.set_expiry(value) * 如果value是个整数,session会在些秒数后失效。 * 如果value是个datatime或timedelta,session就会在这个时间后失效。 * 如果value是0,用户关闭浏览器session就会失效。 * 如果value是None,session会依赖全局session失效策略。
2019年-10月-25日
67 阅读
0 评论
未分类
2019-10-24
http请求参数之Query String Parameters、Form Data、Request Payload
在与server端进行数据传递时,通常会用到GET、POST方法进行参数提交,而参数提交的方式,通常取决于server端对数据的接收方式。 Query String Parameters 当发起一次GET请求时,参数会以url string的形式进行传递。即?后的字符串则为其请求参数,并以&作为分隔符。 如下http请求报文头: // General Request URL: http://foo.com?x=1&y=2 Request Method: GET // Query String Parameters x=1&y=2 Form Data 当发起一次POST请求时,若未指定content-type,则默认content-type为application/x-www-form-urlencoded。即参数会以Form Data的形式进行传递,不会显式出现在请求url中。 如下http请求报头: // General Request URL: http://foo.com Request Method: POST // Request Headers content-type: application/x-www-form-urlencoded; charset=UTF-8 // Form Data x=1&y=2 Request Payload 当发起一次POST请求时,若content-type为application/json,则参数会以Request Payload的形式进行传递(显然的,数据格式为JSON),不会显式出现在请求url中。 如下http请求报头: // General Request URL: http://foo.com Request Method: POST // Request Headers content-type: application/json; charset=UTF-8 // Request Payload x=1&y=2 如果希望通过Form Data的方式来传递数据,则可以通过原生方法formData()来进行数据组装,且content-type需要设置为multipart/form-data。 如下http请求报头: // General Request URL: http://foo.com Request Method: POST // Request Headers content-type: multipart/form-data; charset=UTF-8 // Request Payload ------WebKitFormBoundaryAIpmgzV8Ohi99ImM Content-Disposition: form-data; name=“x” ------WebKitFormBoundaryAIpmgzV8Ohi99ImM Content-Disposition: form-data; name=“y” ------WebKitFormBoundaryAIpmgzV8Ohi99ImM– 其中,WebKitFormBoundaryAIpmgzV8Ohi99ImM为浏览器随机生成的boundary,作为分隔参数,作用等同于&。 application/x-www-form-urlencoded 和 multipart/form-data The content type "application/x-www-form-urlencoded" is inefficient for sending large quantities of binary data or text containing non-ASCII characters. The content type "multipart/form-data" should be used for submitting forms that contain files, non-ASCII data, and binary data. multipart/form-data的优势还伴随一些兼容性问题,详细请参考文章结束的参考文献。
2019年-10月-24日
79 阅读
0 评论
未分类
2019-10-24
Echarts使用渐变色的方法
我使用的是echarts 4.2版本 在管网的文档中可查看其配置项,以柱状图为例: 首先在series中找type:'line' 然后找到areaStyle 在color中有方法能生成渐变色: // 线性渐变,前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1,相当于在图形包围盒中的百分比,如果 globalCoord 为 `true`,则该四个值是绝对的像素位置 color: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [{ offset: 0, color: 'red' // 0% 处的颜色 }, { offset: 1, color: 'blue' // 100% 处的颜色 }], globalCoord: false // 缺省为 false } // 径向渐变,前三个参数分别是圆心 x, y 和半径,取值同线性渐变 color: { type: 'radial', x: 0.5, y: 0.5, r: 0.5, colorStops: [{ offset: 0, color: 'red' // 0% 处的颜色 }, { offset: 1, color: 'blue' // 100% 处的颜色 }], globalCoord: false // 缺省为 false } // 纹理填充 color: { image: imageDom, // 支持为 HTMLImageElement, HTMLCanvasElement,不支持路径字符串 repeat: 'repeat' // 是否平铺, 可以是 'repeat-x', 'repeat-y', 'no-repeat' } 第二种方法:使用echarts内置的渐变色生成器echarts.graphic.LinearGradient { type: 'bar', itemStyle: { normal: { color: new echarts.graphic.LinearGradient( 0, 0, 0, 1, //4个参数用于配置渐变色的起止位置, 这4个参数依次对应右/下/左/上四个方位. 而0 0 0 1则代表渐变色从正上方开始 [ {offset: 0, color: '#000'}, {offset: 0.5, color: '#888'}, {offset: 1, color: '#ddd'} ] //数组, 用于配置颜色的渐变过程. 每一项为一个对象, 包含offset和color两个参数. offset的范围是0 ~ 1, 用于表示位置 ) } } } 效果: Measure Measure
2019年-10月-24日
138 阅读
0 评论
未分类
2019-10-20
exceptions: django2.2/ mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3
在centos部署python应用后访问页面,显示如下异常信息 报错环境 python=3.6,django=2.2 …… django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3. 解决方法: Django连接MySQL时默认使用MySQLdb驱动,但MySQLdb不支持Python3,因此这里将MySQL驱动设置为pymysql,使用 pip install pymysql 进行安装,然后在工程文件__init__.py添加以下代码即可。 # 安装pymysql pip install pymysql #__init__.py import pymysql pymysql.install_as_MySQLdb() 第一种: django降到2.1.4版本就OK了 第二种(仍使用django 2.2版本): #找到Python环境下 django包,并进入到backends下的mysql文件夹 cd /opt/anaconda3/envs/envAGC_Mini/lib/python3.6/site-packages/django/db/backends/mysql #文件列表如下 # 找到base.py文件,注释掉 base.py 中如下部分(35/36行) if version < (1, 3, 3): raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__) 此时仍会会报错,报错信息如下: AttributeError: ‘str’ object has no attribute ‘decode’ #找到operations.py文件(46行,版本不同行数不同哈~自个儿find一下),将decode改为encode #linux vim 查找快捷键:?decode if query is not None: query = query.decode(errors='replace') return query #改为 if query is not None: query = query.encode(errors='replace') return query
2019年-10月-20日
214 阅读
0 评论
未分类
2019-10-20
Django自带的加密算法
Django 内置的User类提供了用户密码的存储、验证、修改等功能,可以很方便你的给用户提供密码服务。 默认的Ddjango使用pbkdf2_sha256方式来存储和管理用的密码,当然是可以自定义的。 Django 通过PASSWORD_HASHERS 设置选择要使用的算法。下面有一个列表,列出了Django 支持的哈希算法类。列表的第一个元素 (即settings.PASSWORD_HASHERS[0]) 会用于储存密码, 所有其它元素都是用于验证的哈希值,它们可以用于检查现有的密码。意思是如果你打算使用不同的算法,你需要修改PASSWORD_HASHERS,来将你最喜欢的算法在列表中放在首位。 一个settings中的Password_hashers看起来是这样的: PASSWORD_HASHERS = ( 'django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', 'django.contrib.auth.hashers.BCryptPasswordHasher', 'django.contrib.auth.hashers.SHA1PasswordHasher', 'django.contrib.auth.hashers.MD5PasswordHasher', 'django.contrib.auth.hashers.CryptPasswordHasher', ) 具体在Django中的用户密码生成、验证的过程是怎么样的,可以通过django.contrib.auth.hashers模块中的几个函数大体了解一下。通过对两个函数的了解,完全可以脱离内置的User, 实现自定义的用户表中使用django内置的密码机制。 首先导入 from django.contrib.auth.hashers import make_password, check_password 通过函数名即可发现,主要有两个函数,分别是创建密码和验证 用法 ps = "123456" dj_ps = make_password(ps, None, 'pbkdf2_sha256') #创建django密码, 第二个参数为None是每次产生的密码都不用,第三个参数为算法, 后面两个参数可以忽略 ps_bool = check_password(ps, dj_ps) # check_password 返回值为一个Bool类型,验证密码的正确与否
2019年-10月-20日
80 阅读
0 评论
未分类
2019-10-20
ant design pro 中与服务器的交互
第一步:首先要设置好代理 第二步:编写接口 第三步:编写effect里面的方法 import { testApi, userApi } from '@/services/api';//testApi就是2步骤里的请求名称 export default { namespace: 'testM',//要唯一 state: { list: [],//后台返回的数据存储在该list中,名字想怎么起怎么起 result: {},//这个是我为了存储后台返回来的json }, effects: { * listAPP({ payload }, { call, put }) {//这个是界面调取接口的名称 const response = yield call(testApi, payload);//这个testApi就是刚才引入的 yield put({ type: 'queryList',//通过调用这个把返回数据传给list,result payload: response, }); }, * dealWith({ payload }, { call, put }) { const response = yield call(userApi, payload); yield put({ type: 'deal', payload: response, }); }, // 清除 * clear(_, { put }) { yield put({ type: 'clean', }); }, }, reducers: { queryList(state, action) { return { ...state, list: action.payload,//啦啦啦,这就拿到数据啦 }; }, deal(state, action) { return { ...state, result: action.payload, }; }, clean(state) { return { result: {}, }; }, } };
2019年-10月-20日
95 阅读
0 评论
未分类
2019-10-16
Django学习笔记
1.创建项目 django-admin startproject wen 2.启动 python3 manage.py runserver 0:8000 3.返回一个字符串 创建应用 python3 manage.py startapp home 在views.py中添加函数 from django.http import HttpResponse def index(request): return HttpResponse('') 修改跟路由 url(r'^',include('home.urls')) 新建自路由 在home目录下 urls.py from . import views url(r'^$',views.index) 4.访问 127.0.0.1:8000 5.返回一个网页 a.在manage.py同级目录下创建templates b.修改settings.py dirs:[os.path.join(BASE_DIR,'templates')] c.修改应用下的views.py def page(request): return render(request,'index.html',{'key':数据}) d.修改子路由 url(r'^index/$',views.page) 6.路由 从上往下匹配 如果找到符合规则的路由 后面的路由不在进行匹配 如果一个都没有匹配到 返回404 位置参数: 将路由用小括号括起来的内容作为位置参数传递给视图函数 url(r'page/([0-9]+)/',views.page) def page(request,p): 命名组:关键字参数 url(r'page/(?P<x>[0-9]+)/',views.page) def page(request,x) 默认值参数: 定义两个路由指向一个视图函数 url(r'^users/$',views.users), url(r'^users/([0-9]+)/$',views.users) def users(request,p=1): print(p) return HttpResponse('默认值参数') 错误处理: 修改settings文件 关闭debug 在templates下创建404.html 反向解析: 写死:硬编码 反向解析: 通过路由的name属性 反向查找路由规则 给路由添加name属性 在模板中使用 {% url '路由的名子' %} 如果有参数 {% url '路由的名子' 参数1 参数2 %} 在视图函数当中使用: from django.core.urlresolvers import reverse reverse('路由名字') reverse('路由名字',args=(参数1,参数2)) 模型配置: 1.安装pymysql 2.修改配置文件 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'stu',#选择数据库的名,请确认你的mysql中有这个库 'USER': 'root', 'PASSWORD': 'abc123', 'HOST': '127.0.0.1', 'PORT': '3306', } } 3.项目同名的目录下的init.py import pymysql pymysql.install_as_MySQLdb() 4.将应用添加到setting.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'home' ] 定义模型 1.找到应用下的models.py class users(models.Model): # Users home_users name=models.CharField(max_length=20) # varchar() char() age=models.IntegerField(default=16) 2.生成迁移文件 在manage.py 目录下执行 python3 manage.py makemigrations 会在应用的migrations目录下生成一个迁移文件 3.执行迁移 python3 manage.py migrate 表的命名: 默认不指定表名 应用名_类名的小写 添加数据: from . import models res = models.类名() res.name='' res.age='' res.save() 查询数据 res = models.类名.objects.all() 返回的是一个查询集合 更新数据 res = models.类名.objects.get(id=) res.name='' res.save() 删除: res = models.类名.objects.get(id=) res.delete() 1.路由的默认值参数 2.反向解析 3.模型的配置 4.定义一个模型 5.使用模型增删改查操作 6.模型的属性 7.字段类型 使用django框架实现用户的管理 首页:所有用户的信息 添加用户: 接受用户的信息 User 删除用户: 修改用户: <form action="{% url '' %}" method="GET"></form>
2019年-10月-16日
254 阅读
2 评论
未分类
2019-10-16
Django的安装
第一步: 设置pip的配置文件 改为中国 vim ~/.pip/pip.conf [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host = https://pypi.tuna.tsinghua.edu.cn 第二步: <span style="font-variant-ligatures:no-common-ligatures;">下载Django</span> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000} span.s1 {font-variant-ligatures: no-common-ligatures} sudo pip3 install django==1.11.* 第三步: 创建项目 django-admin startprobject web 第四步: 启动项目 cd web python3 manage.py runserver p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; min-height: 13.0px} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4a00ff} span.s1 {font-variant-ligatures: no-common-ligatures} span.s2 {font-variant-ligatures: no-common-ligatures; background-color: #1de2df}
2019年-10月-16日
74 阅读
0 评论
未分类
2019-10-14
Python学习笔记之面向对象商店
class Cx(): zhanghao = '' __listvar = { 'aa':'123123', 'bb':'321321' } __login = False __countError = 0 __shopy = [ (1,'鞋子',100,500), (2,'袜子',2,1000) ] __qian = 1000 def __init__(self): self.__vlidate_zhanghao(); self.__vlidate_password(); if not self.__login: print('系统错误') import sys; sys.exit(); self.__showShopy(); self.__goumai(); def __vlidate_zhanghao(self): zhanghao = False; while not zhanghao: name = input('请输入您的账号:').strip(); if name in self.__listvar: zhanghao = True; self.zhanghao = name if not zhanghao: print('对不起账号不存在请重新输入') def __vlidate_password(self): mima = False; while not mima: if self.__countError > 2: print('对不起您输入错误次数已达上限,系统自动退出') import sys; sys.exit(); pwd = input('请输入您的密码:') if pwd == self.__listvar[self.zhanghao]: mima = True print('恭喜登陆成功') self.__login = True else: print('您输入的密码不正确请重新输入') self.__countError += 1; def __showShopy(self): print('商品信息') for i in self.__shopy: print('序号%d 名称:%s 价格:%d 剩余:%d' % (i[0], i[1], i[2], i[3])) print('输入数字 0 离开商店') def __goumai(self): while True: cz = False; dd = input('请输入需要购买商品的序号:'); if dd == '0': print('正在送您离开商店。。。') import sys; print('您已离开商店!') sys.exit() if (dd == ''): print('您的输入有误,请重新输入') continue; dd = dd.strip() for i in self.__shopy: if dd == str(i[0]): cz = True temp = i; if not cz: print('对不起,您输入的序号不正确请重试') continue; if self.__qian < temp[2]: print('对不起,您的余额不足以购买本商品') continue; self.__qian = self.__qian - temp[2] self.__showShopy(); print('恭喜您购买[%s]成功, 花费[%d] 剩余[%d]' % (temp[1], temp[2], self.__qian)) Cx()
2019年-10月-14日
49 阅读
0 评论
未分类
2019-10-14
Python学习笔记之面向对象
# 菱形继承 class Original(): def say(self): print('1') print('2') class Man(Original): def say(self): print('3') super().say() print('4') class Woman(Original): def say(self): print('5') super().say() print('6') class Childer(Man, Woman): def say(self): print('7') super().say(); print('8') print(Childer.mro())
2019年-10月-14日
51 阅读
0 评论
未分类
6
7
8
9
10