Python+Django知识点总结
下面是自己学习过程中的一些知识点,需要的可以看看,本人还是一个小菜鸟,由于需要就学习一下用django框架还写个web试试:
1:运行服务器:python manage.py runserver 8080 (可以指定端口也可以用默认的8000,不写)
2:进行数据库的迁移:python manage.py makemigrations
3:实施数据库迁移:python manage.py migrate
4:进入shell模块:python manage.py shell
5:创建django管理模块:python manage.py createsuperuser
6:向admin注册django的模型(在项目中的admin.py文件进行设置):
from mydjango.models import *
admin.site.register(bookinfo)
7:设置在后台显示所要显示的字段(在admin.py文件中进行设置):
class bookinfoadmin(admin.modeladmin):
list_display = [这里面写要显示的字段名就可以了],比如list_display = ['id' , 'btitle' , 'bpub_date']; #在admin显示的字段名
list_filter = ['btitle' ] #设置个过滤器,也就是显示到页面的右边,方面进行搜索
list_per_page = 10 #设置每个页面显示的数据的条数
search_fields = ['btitle'] #设置搜索框的列表
然后再将这个list注册到6中就可以了:admin.site.register(bookinfo ,bookinfoadmin )
或者上面用装饰器的方法也行,在类前面写@admin.register(bookinfo)
设置admin站点显示为中文和时区(在setting.py)中设置为:language_code=‘zh-hans’ 和time_zone=‘asia/shanghai’
设置内嵌类(就是在增加某个数据表的时候,将内嵌的类的内容也可以进行添加):
比如: class neiqian (admin.tabularinline):
model = scord #对应要内嵌的数据库表
class studentadmin(admin. modeladmin):
inlines = [ neiqian ] #对应要内嵌的类
8:安装mysql驱动:python install mysqlclient
9:使用mysql在django的setting.py中进行设置:
databases = {
'default': {
'engine': 'django.db.backends.mysql',
'name': 'djangodb',
'user':'root',
'password':'mao15897610067',
'host':'localhost',
'port':'3306',
}
}
10:进入python的shell控制,来进行编写代码:
python manege.py shell
11:url的正则表达式匹配:
(1):匹配数字:[0-9]或者\d
(2):匹配多个数字:[0-9]+ 或者\d+
12:将session进行存储(在setting.py文件中设置)
(1)设置存储到数据库中:session_engine='django.contrib.sessions.backends.db'
(2)设置存储到内存中:session_engine='django.contrib.sessions.backends.cache'
(3)设置存储到内存和数据库中:session_engine='django.contrib.sessions.backends.db_cache'
13:在 view.py 文件中,
(1)引用http模块:from django http import *;
(2)引用modele模块: from .modele import * ;
14: 配置csrf验证,在表单中:{% csrf_token %}
15:配置静态文件的存储(在setting.py文件下):
static_url = '/static/' (这个一般都会默认已经写好)
staticfiles_dirs=[os.path.join(base_dir,'static')]
其中的那名字的话,一般是叫做"static",当然你可以进行修改的,只是创建的名字要和这个对应就可以了,默认一般都是用这个名字的话比较好。然后在目录下创建对应的static文件夹,再在下面创建与应用一样的文件夹即可(当然针对不同的静态文件,还目录下还可以创建子目录方便管理,比如js , css , img等)。
16:在模版中引用static文件下面的图片
(1)方法一:使用绝对路径进行使用,例如:<img src = "/static/mydjango/a1.png">
(2)方法二:使用动态的方式进行使用:例如<img src = "{% static 'mydjango/a1.png' %}">
其中,上面的mydjango是我应用的名字
方法二的好处在于:这个地址不会被随意发现,而且不容易随着设置的名字的不同而产生影响,具有动态性。
方法二的注意点就是要在模版的开始引用下面的一句话:
<% load static from staticfiles %>
17:使用django中的中间件:
作用:用来干扰整个的url的请求(一种面向切面编程的思想,类似spring当中的ioc和di(控制反转)):
使用方法:在setting.py中的中间件的位置进行添加设置,比如:
(1)在app目录下创建一个.py的类,比如创建了myexception.py
(2)创建一个类,比如
from django.http improt *
class myexceptionhappend():
def process_exception(request , response , exception):
return httpresponse(exception.message);
这里就简单点的用一个方法做演示,其中的作用就是当发生了访问view出现异常的时候,把异常进行打印出来
(3)在setting.py 中进行添加设置,即middleware_classes=(‘mydjango/exception.myexceptionhappend’)
切记:中间件中只有如下的五个方法能够被使用
(1)干扰url之前:使用process_request()方法
(2)干扰view之前:使用process_view()方法
(3)干扰view执行后,也就是templete之前:使用process_template_resonce()
(4)当在执行视图发生异常:使用process_exception()方法
(5)在templlate之后:使用process_response()方法
18:上传图片(文件)步骤:
(1)首先需要在models类中进行设置相应的图片属性的字段,比如myimg = models.imgfield(upload_to='cars/')
在上面中,设置了,上传的图片会被传到cars/这个目录下(可以自己进行设置)
(2)如果django中还没有下载pillow的这个东西的话,需要先进行下载,方式为在cmd中,pip install pillow==3.4.1
版本至少要为3.4.1以上,因为之前的还没有支持图片的存储
(3)由于上传的图片会被配置到服务器目录中的staitc目录下的media下,这个目录就是用来专门针对上传的资源进行管理,
所以需要在setting.py中进行设置一个为:media_root = os.path.join(base_dir , "static/media/")
(4)在static目下下,创建一个media目录,以后这个目录就是默认存储上传的文件
注意点:在进行提交图片或者文件的html中的input标签中,类型是file,而且这个from表单必须有enctyoe = "multipart/from-data"这个属性
比如:<from action=" " method="post" enctyoe = "multipart/from-data">否则不能进行提交到服务器接受
例子:(1)上传图片的html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>上传图片或者文件</title>
</head>
<body>
<form action="/index/picturehandle/" method="post" enctype="multipart/form-data">
{% csrf_token %}
<lab>请选择要上传的文件</lab>
<input type="file" name = 'picl'><br>
<input type="submit" value="上传" name="submit">
</form>
</body>
</html>
(2)下载传送的内容的view方法:
#测试文件上传之后的处理
def picturehandle(request):
#拿到上传过来的文件
picture = request.files['picl'];
#拼凑保存到服务器中文件的名字
filename = os.path.join(settings.media_root , picture.name)
#解析传过来的图片并且写到服务器对应的目录media下
with open(filename , 'wb+') as readcontent: #注意这里的读取方式要为'wb+',否则会有问题
for con in picture.chunks(): #这是读取的方式
readcontent.write(con);
#将服务器中存储的图片进行显示
return httpresponse('<img src = "/static/media/%s">'%picture.name);
19:template继承:
(1)定义需要填充的内容:{% block content %} {% endblock content%} #这样的话,在继承的页面直接填充这里面的内容就会被替换成对应的内容
(2)需要在template最开始写继承的页面:比如:{% extends ''myhtml/base.html"%}
20:分页内容
对象:paginator,管理数据分为多少页
对象: page,管理某一个页的内容
用法例子:
(1)view.py中
1 #测试分页操作 2 #python学习交流群:548377875 3 def showdblist(request): 4 #得到要显示的数据 5 list = bookinfo.objects.all(); 6 #得到分页的对象,并且将查询到的数据分为4页 7 paginator = paginator(list , 4); 8 #得到要进行显示的页数 9 index = request.get.get('pagenumber'); 10 #判断请求中是否有传过来的页面数,如果没有则表示是第一次访问,即默认访问第一页 11 if index == none : 12 index = 1; 13 # 得到管理每一页的对象page 14 page = paginator.page(index) 15 context ={'page': page}; 16 return render(request , 'mydjango/showlistdate.html' , context);
(2)urls.py中
1 url(r'^showdblist' , views.showdblist),
(3)templates中
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="utf-8"> 5 <title>显示分页内容</title> 6 </head> 7 <body> 8 <center> 9 <ul> 10 <!-- 得到对应页中的每个数据对象--> 11 {% for everypage in page %} 12 <li> {{ everypage.btitle }}</li> 13 {% endfor %} 14 </ul> 15 <hr> 16 <!--显示对应的页码数--> 17 {% for index in page.paginator.page_range %} 18 <!-- 如果显示的是当前页码的内容,则将页码变色--> 19 {% if index == page.number %} 20 <a style="color: red">{{ index }} </a> 21 {% else %} 22 <!--将点击的页码传送过去,方便显示对应的内容--> 23 <a href="/index/showdblist?pagenumber={{ index }}" style="color: green">{{ index }}</a> 24 {% endif %} 25 {% endfor %} 26 27 </center> 28 </body> 29 </html>
python读取和写入数据excl表格
1 def readuserinfomationfile(request , filename): 2 #写服务器的上传过来的文件路径 3 webfilename = os.path.join(settings.media_root, filename) //这是自己在django服务器中读取的一个excl路径 4 # 打开文件 5 workbook = xlrd.open_workbook(r''+webfilename) //如果要读本地的excl,那么路径可以写,例如:(r'f:\demo.xlsx') 6 # 获取所有sheet 7 #workbook.sheet_names() 8 #获取第一个sheet名字 9 sheet2_name = workbook.sheet_names()[0] 10 # 根据sheet索引或者名称获取sheet内容 11 sheet2 = workbook.sheet_by_index(0) # sheet索引从0开始,第一个sheet就是为0,因为一个excl表里面可以有多个sheet 12 # sheet2 = workbook.sheet_by_name('sheet2') #这是直接通过名字进行获取 13 14 # sheet的名称,行数,列数 15 print (sheet2.name, sheet2.nrows, sheet2.ncols) 16 17 # 获取指定的整行和整列的值(返回的是数组类型) 18 rows = sheet2.row_values(3) # 获取第四行内容 19 cols = sheet2.col_values(2) # 获取第三列内容 20 print (rows) 21 print (cols) 22 23 # 获取指定某个单元格内容(三种方法) 24 print (sheet2.cell(1, 0).value) 25 print (sheet2.cell_value(1, 0)) 26 print (sheet2.row(1)[0].value) 27 # 获取单元格内容的数据类型 28 #ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error 29 print (sheet2.cell(1,0).ctype)
转载: https://blog.csdn.net/cs_hnu_scw/article/details/75267823