- 博客(38)
- 收藏
- 关注
原创 Django模型的继承
抽象模型继承(abstract model)假如我们有如下两个模型Article(文章)和Course(课程)模型。它们的模型中有很多共同的字段,比如作者、标题、创建日期和更新日期这样写会造成大量的代码重复,一个更好的方式是提取两个模型共同的字段建立一个父类抽象模型(abstract model),再建立子类模型去继承父类。我们需要根据子类模型的名字,生成差异化的related_name。这时我们只需在父类模型中设置related_name时引用应用名app_label(%(app_label)s
2020-08-25 09:58:44 717
原创 Django限制用户上传文件格式与大小的最佳处理方式是什么
一个处理该问题的最佳方式是扩展Django的FileFiled字段,在创建模型时直接设置可以接受的文件类型,并限定可以上传的文件的最大尺寸首先在你APP文件夹内新建fields.py, 并添加如下代码(来自stackoverflow)。新扩展的FileField叫RestrictedFileField继承了FileField类,并包含了额外的两个可选参数: 可接受的内容类型content_types和max_upload_size最大上传尺寸(比如5242880=5MB)from django.db
2020-08-25 09:39:59 996
原创 Django --根据已有表生成ORM模型
在实际开发中,有些时候可能数据库已经存在了。如果我们用Django来开发一个网站,读职的是之前已经存在的数据库中的数据。那么该如何将模型与数据库中的表映射呢?根据旧的数据库生成对应的ORM模型,需要以下几个步骤:1、Django给我们提供了一个inspectdb的命令,可以非常方便的将已经存在的表,自动的生成模型。想要使用inspectab自动将表生成模型。首先需要在settings...
2019-10-01 15:51:55 3489 2
原创 Django --自定义path转换器
自定义URL转换器:相信之前已经了解到过一些django内置的url转换器,包括有int、uuid,等。有时候这些内置的url转换器并不能满足我们的需求,因此django给我们提供了一个接口可以让我们自己定义自己的url转换器。自定义url转换器按照以下五个步骤来走就可以了:1.定义一个类,直接继承自object就可以了.2.在类中定义一个属性regex,这个属性是用来限...
2019-10-01 15:17:02 547
原创 Python 建立虚拟环境
为什么需要虚拟环境:到目前位置,我们所有的第三方包安装都是直换通过pip install的方式进行安装的,这样安装会将那个包安装到你的系统级的python环境中,但是这样有个问题,就是如果你现在用Django1.10.x写了个网站,然后你的领导跟你说,之前有个旧项目是用Django0.3开发的,让你来维护,但是Django1.80不再兼容Django0.9的些语法了这时候就会碰到个问...
2019-10-01 14:43:45 332
原创 Django --haystack实现全文搜索
搜索搜索可以使用最原始的like的方式进行搜索。当然这种搜索方式对于些小的数据是非常合适的。但是随着数据越来越大。这时候我们就需要使用搜索引擎了。搜索引擎会将所有要搜索的数据使用算法做个素引,以后搜索的时候就只需要根据这个索引脚找到相应的数据。搜索引擎做索引的过程会比较慢,但是一旦索引建立完成,那么以后再搜索的时候就会很快了。django-haystack插件:这个插件是专门...
2019-09-30 12:30:05 526
原创 Django --更改session的存储机制
默认情况下,session数据是存储到数据库中的。当然也可以将session数据存储到其他地方。可以通过设置SESSION_ENGINE来更改session的存储位置,这个可以配置为以下几种方案:1.django.contrib.sessions.backends.db :使用数据库。默认就是这种方案。2.django.contrib.sessions.backends.file :使用...
2019-09-30 11:14:50 445
原创 Django --操作cookie和session
cookie机制cookie是服务器传给客户端的体积很小的纯文本文件。客户端请求服务器,如果服务器需要记录该用户状态,就向客户端浏览器发一个cookie。客户端浏览器会把cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该cookie一同提交给服务器。服务器检查该cookie,以此来辨认用户状态。Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦...
2019-09-30 11:01:02 219 1
原创 Django --migrate错误处理
migrate怎么判断哪些迁移脚本需要执行:他会将代码中的迁移脚本和数据库中django_migrations中的迁移脚本进行对比,如果发现数据库中,没有这个迁移脚本,那么就会执行这个迁移脚本。migrate做了什么事情:将相关的迁移脚本翻译成SQL语句,在数据库中执行这个SQL语句。 如果这个SQL语句执行没有问题,那么就会将这个迁移脚本的名字记录到django_migrat...
2019-09-30 10:31:46 314
原创 django开发:使用django-allauth实现第三方账号登录
用户登录、注册系统,使其支持第三方登录。django-allauth,根据其官方文档(这里:https://django-allauth.readthedocs.io/en/latest/index.html),同时支持本地和第三方账号(Github,百度、微博、微信等等),集成了邮箱验证、密码修改、本地账号关联(多个)第三方账号等各种功能。安装pip install django-al...
2019-03-24 20:28:42 1526 1
原创 Python收集参数的解包
比如我们在收集参数时传入的参数是一个列表,但我们希望在使用时可以直接遍历args参数但这样我们运行的结果是:要解决此问题可以在函数的收集参数传入时前面加一个“ * ”:此时函数运行的结果是: 要是关键字参数的解包向传入的参数前加两个“ ** ”:结果为:...
2018-11-13 22:49:22 539
原创 Python安装scrapy库
由于本人在安装scrapy库的道路上遇到过很多坑,由此不能再坐视不管,来帮帮广大同胞首先在此网站https://www.lfd.uci.edu/~gohlke/pythonlibs/找到twisted库:在此中间找适合自己电脑配置的文件twisted下载然后用命令行进入此目录然后再命令行执行 pip install + "你所下载的那个文件名"+"(注意这里有个点).wh...
2018-11-01 22:22:47 3611 1
原创 邻接表建立图
#include <iostream>typedef int vertex; //用顶点下标表示顶点 typedef struct adjvnode * ptrtoadjvnode;struct adjvnode{ vertex adjv; //邻接点下标 weighttype weight; //边权重 ptrtoadjvno...
2018-10-31 22:49:35 1341
原创 二叉搜索树
struct treenode{ elementtype element; tree left; tree right;};typedef struct treenode bintree; bintree Delete(elementtype x,bintree bst){ position tmp; if(!bst) pri...
2018-10-31 22:45:59 149
原创 哈夫曼树
哈夫曼树struct treenode{ int weight; struct treenode *left, *right;};struct treenode *huffman(minheap h){ //假设h->size个权值已经存在h->elements[]->weight里 int i; struct treenode...
2018-10-24 22:47:05 186
原创 树 先序 中序 推出后序遍历
//prel:先序遍历数组开始元素下标位置//inl:中序遍历数组开始元素下标位置 //postl:后序遍历数组开始元素下标位置 void solve(int prel ,int inl ,int postl ,int n){ if(n == 0) //如果要判断的数组中元素个数为0 则退出 { return ; } ...
2018-10-24 22:08:20 199
原创 0-1背包 动态规划
本题提供思想 看看你看完能不能写出来!!! 有N件物品和一个容积为M的背包。第i件物品的体积w[i],价值为d[i].求解将那些物体装入背包可是价值总和最大。每种物品只有一件,可以选择放或者不放。(N <= 3500, M <= 13000)用F[i][j]表示取前i种物品,使他们的总体积不超过j的最优取法取得的价值总和。则要求F[N][M]边界:if(w[1] <...
2018-10-23 23:05:33 230
原创 归并排序 递归算法
数组排序任务可以如下完成:(1):将前一半排好序(2):将后一半排好序(3):把两半归并到一个新的有序数组中,然后再拷贝回原来的数组,排序完成利用递归思想将数组一直划分为要排序的另一半,最后就回将问题化简为相邻两个数的排序,然后将排好序的数组归并到一个数组中,然后继续向上递归直至排序完成。 int a[10]={15, 18, 45, 96, 23, 58, 75, 1, ...
2018-10-23 22:51:49 2547
原创 数字三角形 递推算法
关于介绍 请观看上一篇博客 在此就不多做介绍了 递推算法的图在此由最后一行的数组向上递推,比如第四行的第一个的值为他自己的值加上第五行第一个的值和他自己的值加上第五行第二个的值;比较大小,将较大的值写入第四行第一个的位置,由此向上慢慢递推,输出第一行第一个的值就是最大的值。比如a[4][0] = max( a[4][0]+a[5][0], a[4][0]+a[5][1] );...
2018-10-22 22:02:55 1392
原创 数字三角形 动态规划
用二维数组存放数组三角形;D(r, j):第r行第j个数字(r,jcing1开始算)MaxSum(r,j):从D(r, j)到底边的各条路径中,最佳路径的数字之和。所以问题化成求MaxSum(1,1):D(r,j)出发,下一步只能走D(r+1, j)或者D(r, j+1)if(r ==N) MaxSum(r,j)= D(r, j);else MaxSum...
2018-10-22 21:48:10 456
原创 N皇后 递归算法
int n;int queenpos[100]; //用来存放算好的皇后位置。最左上角是(0.0)void nqueen (int k);int main(){ cin >> n; nqueen(0); return 0;}void nqueen (int k) //在0~k~1行皇后已经摆好的情况下,摆第k...
2018-10-22 21:35:39 1585 1
原创 图 Floyd多源最短路径
多源最短路径void floyd() { for(i = 0; i < n; i++) { for(j = 0; j < n; j++) { d[i][j] = g[i][j]; //g[i][j]是图的邻接矩阵 path[i][j] = -1; } ...
2018-10-22 21:25:52 309
原创 图 Dijkstra单源最短路径
有权图单源最短路径int dist[w] = s到w的最短距离 int path[w] = s到w的路径经过的结点memset(dist,/*正无穷*/,sizeof(dist));memset(path,-1,sizeof(path));void dijkstra(vertex s){ while(1) { v = //未收录的顶点中dist最小的 ...
2018-10-22 21:24:29 203
原创 图 无权图单源最短路径
int dist[w] = s到w的最短距离 int path[w] = s到w的路径经过的结点memset(dist,-1,sizeof(dist));memset(path,-1,sizeof(path));dist[s] = 0; //调用s之前 void unweight(vertex s){ inqueue(q ,s); //将结点加入队列 w...
2018-10-22 21:20:28 381
原创 树的遍历
先序遍历void pretrversal(bintree t) { if(t) { printf("%d",t); pretraversal(t->left); pretraversal(t->right); } } 中序遍历void midtrversal(bintree t...
2018-10-01 13:37:52 181
原创 邻接矩阵建立图
邻接矩阵建立图typedef struct gnode * mgraph;struct gnode{ int nv; //顶点数 int ne; //边数 weighttype g[maxnum][maxnum]; datatype data[maxnum]; //存顶点的数据 };typedef int vertex;//建...
2018-09-26 22:14:07 1344
原创 归并排序
int a[10]={15, 18, 45, 96, 23, 58, 75, 1, 52, 69};int b[10];void Merge(int a[], int s, int m, int e, int tmp[]){ //将数组a的局部a[s,m]和a[m+1,e]合并到tmp,并保证tmp有序,然后再拷贝回a[s,m] ...
2018-09-26 22:00:52 137
原创 最大堆和堆排序
最大堆#define maxdata 10000000struct heapstruct{ elementtype *elements; //存储堆元素的数组 int size; //堆的当前元素个数 int capacity; //堆的最大容量 };最大堆的建立struct heapstcuct *create(int maxsi...
2018-09-24 15:08:14 279
原创 C++ get() 和 getline()的区别
1,方法get(char &)和get(void)提供不跳过空白的单字符输入功能;2,函数get(char * , int , char)和getline(char * , int , char)在默认情况下读取整行而不是一个单词;它们被称为非格式转化输入函数,因为它们只是读取字符输入,而不会跳过空白,也不进行数据转换。 在使用char参数或没有参数的情况下,get()方法...
2018-08-17 11:13:29 26267
原创 C++ 移动语义和右值引用
移动语义类似于在计算机中移动文件的情形:实际文件还留在原来的地方,而只修改记录。例如有一个函数,它返回一个vector<string>对象:要实现移动语义,需要让编译器知道什么时候需要复制,什么时候不需要。这就是右值引用发挥作用的地方。可定义两个构造函数,其中一个是常规复制构造函数,它使用const左值引用作为参数,这个引用关联到左值实参,如语句#1中的vstr;另一个...
2018-08-16 11:34:48 354
原创 C++ 模板类和友元
模板类的友元分三类:1,非模板友元。2,约束模板友元,即友元的类型取决于类被实例化时的类型。3,非约束模板友元,即友元的所有具体化都是类的每一个具体化的友元。 1,模板类的非模板友元函数count()函数不是通过对象调用的(它是友元不是成员函数),也没有对象参数,那么它如何访问hasfriend对象?它可以访问全局对象;可以使用全局指针访问非全局对象;可以创建自己的...
2018-08-15 11:07:38 3856
原创 C++ 强制类型转换
1,dynamic_cast;2,const_cast;3,static_cast;4,reinterpret_cast; 1.static_caststatic_cast用来进用行比较“自然”和低风险的转换,比如整型和实数型、字符型之间互相转换。static_cast不能来在不同类型的指针之间互相转换,也不能用于整型和指针之间的互相转换,也不能用于不同类型的引...
2018-08-14 20:12:51 255
原创 C++ 继承和动态内存分配
例如,如果基类使用动态内存分配,并重新定义赋值和复制构造函数,这将怎样影响派生类的实现?取决于派生类的属性。有以下两种情况:第一种:派生类不使用new此时不用为drived类定义显式析构函数,复制构造函数和赋值运算符。此时的drived类的默认赋值构造函数使用显式base类的复制构造函数来复制drived对象的base部分。类的默认赋值运算符将自动使用基类的赋值运算符来对基类组...
2018-08-14 17:28:22 881 1
原创 C++ 定位new运算符
定位new运算符,它让你能够指定要使用的位置,可能使用这种特性来设置其内存管理规程,处理需要通过特定地址进行访问的硬件或在特定位置创建对象。1,头文件<new>2,将new运算符用于提供了所需地址的参数。例如:程序中的buffer是char指针,如果要访问buffer1, buffer2 的地址,需使用(void *)进行强制类型转换。与常规new运算符不同的是...
2018-08-14 10:48:46 2969
原创 C++ 多重继承 虚基类
使用多个基类的继承被称为多重继承(MI)。MI描述的是有多个直接基类的类。与单继承一样,公有MI表示的也是 is--a关系。MI带来的两个主要问题:1. 从两个不同的基类继承同名方法。2. 从两个或更多相关基类那里继承同一类的多个实例。 例如:singer 和 waiter都继承了一个worker 组件,因此singingwaiter将包含两个worker组件。...
2018-08-13 21:31:47 1068
原创 C++ 函数模板
函数模板是通用的函数描述,它们使用泛型来定义函数,其中的泛型可用具体的类型替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。由于模板允许以泛型(而不是具体类型)的方式编写程序,因此有时候也被称为通用编程。在标准C++98添加关键字typename之前,C++使用关键字class来创建模板。例如:在C++11中,可以将class替换为typename。 调用该函数模...
2018-08-13 17:42:51 30672 3
原创 C++ 函数指针
函数指针 与数据项相似,函数也有地址。函数的地址是存储其机器语言代码的内存的开始地址。它允许在不同的时间传递不同的函数地址。使用函数指针需要三步:1. 获取函数的地址: 只要使用函数名(后面不跟参数)即可获得函数地址。 2. 声明一个函数指针声明指向某种数据类型的指针时,必须指定指针指向的类型。同样,声明指向函数的指针时,也必须指定指向的函数类型。这意味着声明应指定函数...
2018-08-12 21:16:48 1606
原创 C++ 智能指针
智能指针 在平常的内存空间分配中我们习惯于用new运算符来开辟一段我们想要的大小的内存空间,我们都知道用此开辟的堆中内存空间,在函数执行完之后要释放该部分内存,否则将会发生内存泄漏。有时候你可能忘记,有时也可能在不经意间删除或注释掉该代码,此时智能指针会对你有帮助。智能指针是行为类似于指针的类对象,再次介绍三个可帮助管理动态内存分配的智能指针模板:1.auto_ptr //C++...
2018-08-12 20:19:59 253
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人