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
Python+Django知識點總結