Python+Django知識點總結

來源:互聯網
上載者:User

標籤:針對   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知識點總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.