標籤:針對 net 切面 Enctype 模組 gis 檔案夾 url ane
下面是自己學習過程中的一些知識點,需要的可以看看,本人還是一個小菜鳥,由於需要就學習一下用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的Regex匹配:
(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 # 得到管理每一頁的對象Page14 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表裡面可以有多個sheet12 # 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 error29 print (sheet2.cell(1,0).ctype)
轉載: 75267823
Python+Django知識點總結