1. 程式人生 > >Python+Django知識點總結

Python+Django知識點總結

part %s dmi lang cfile ext let cli with open

下面是自己學習過程中的一些知識點,需要的可以看看,本人還是一個小菜鳥,由於需要就學習一下用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,那麽路徑可以寫,例如:(rF:\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知識點總結