django學習

liushaozhuanyong發表於2017-05-17
django-simple-captcha==0.4.6
django-pure-pagination-0.3.0
配置網易郵箱(163)如下:
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = "smtp.163.com"
    EMAIL_PORT = 25

    EMAIL_HOST_USER = "************@163.com"

#郵箱賬戶

    EMAIL_HOST_PASSWORD = "****************"
    EMAIL_USE_TLS = False

    EMAIL_FROM = "********************@163.com"

# 郵箱賬戶

  此處email_password為客戶端授權碼,網易郵箱比較特殊,此處配置時應該用客戶端授權碼代替登入密碼進行配置


使用者資訊:
    使用者名稱:Mr_Robot
    密碼:Mr.Robot
    暱稱:痞人八戒


mysql安裝資訊:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'djangodemo',
            'USER': 'Mr.Robot',
            'PASSWORD': 'Mr.Robot',
            'HSOT': '127.0.0.1',
        }
    }

mkvirtualenv virtualenvironment_name(建立虛擬環境)-->



大量內建應用
++後臺管理系統admin
++使用者認證系統auth
++回話系統sessions
安全性
++表單驗證
++SQL隱碼攻擊
++跨站點攻擊

    設定databases,templates下的dirs,新建的staticfiles_dirs
    migration生成資料表-->編寫views.py(後臺的業務邏輯:編寫負責相應url請求的函式/功能模組)-->配置urls.py(將使用者的請求url對映到某一個函式/模組)-->{1、HTML與css檔案分離 2、css檔案分離與地址修改}
    STATICFILES_DIRS=[
        os.path.join(BASE_DIR,'static')
    ]設定靜態檔案的預設目錄

ORM  (Object Relation Mapping物件關係對映)
     models.py和資料庫相關,定義資料庫中的表 django1.8後migrations 資料移植、資料遷移(新出現的)也是和資料庫相關的
     使用了ORM模型,
     models:django提供了大量的field型別,這些型別不僅對應著資料庫中的型別,也對應著很多更加高階的型別
     models.ForeignKey
     models.DateTimeField
     models.IntegerField
     models.IPAddressField
     models.FileField
     models.ImageField
admin.py給admin應用做配置使用
test.py用於測試(用於放置測試指令碼)

專案目錄檔案
++manage.py管理專案,例如runserver啟動伺服器
++settins.py整個網站的配置情況 settings中的templates用於配置處理模板檔案的類
    settings中ALLOWED_HOSTS表示允許訪問本程式的使用者,若設定為'localhost',則只允許外界用localhost訪問本網站
    ROOT_URLCONF指向url配置檔案


url
    urls.py對映配置檔案:決定一個url訪問被哪個程式(函式)相應  urlpatterns即對映表
    為了避免在同一個url配置檔案中存在url衝突,可以用include包含其他url配置檔案,但是其他url配置檔案中的url被“拉長”了。例如:
    在根目錄的url檔案中進行配置:   url(r'^index/',include('blog.urls')),
    在blog目錄中的url檔案中進行配置: url(r'^index/',views.index),
    那麼實際訪問index的url應該是******index/index/
    通常將blog中的url配置成空字串,即用正規表示式“r'^$'”約束為空字串
        ****注意配置url的時候一定注意在url的末尾加上'/'這樣配置,使用者訪問該url時,末尾無論加不加'/'都可以成功訪問。

templates
    HTML檔案,使用了Django模板語言(DTL)
    DTL初步
        render()函式中支援一個dict型別的引數
        該字典是後臺傳遞到模板的引數,鍵為引數名
        在模板中使用{{引數名}}來直接使用
    django會按照INSTALLED_APPS中的新增順序查詢Templates,因此不同app下templates目錄中同名.html檔案會造成衝突
        解決辦法:在各app的templates目錄下建立一個與該app同名的資料夾,然後將各自具有衝突的頁面放進去即可


_init_.py宣告模組的檔案
++wsgi.py :python應用程式和web伺服器之間的介面
migrate makemigrations和同步資料庫有關
將新新增的應用


子目錄project-name中是一些關於專案的配置檔案:
++總的urls配置檔案 urls.py 以及部署伺服器時用到的 wsgi.py 檔案
++__init__.py 是python包的目錄結構必須的,與呼叫有關。
django-admin startproject project-name
django-admin startapp app-name
django-admin start

mysql配置:
    user:MrRobot
    password:Mr.Robot
    dbadmin
workon檢視當前有哪些虛擬環境
workon 虛擬環境名 :即進入想要進入的虛擬環境



使用url別名(避免後期改動url的時候改動大量語句)
    html中:
    <form action="{% url 'go_form' %}" method="post" class="smart-green">
    url.py中:
      urlpatterns = [
      url(r'^admin/', admin.site.urls),
      url(r'^form_go/$', getform,name='go_form'),
    ]



解決model迴圈引用的問題:分層設計
    為方便管理一個大平臺下的各app,我們通常將所有app統一存放在專案根目錄的apps(Programmer所建)下,此時必須在在專案settings的檔案中,進行如下配置:
    import sys
    sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
    即將apps目錄作為第一搜尋目錄(下標為0)

PEP8 (Python編碼規範)
  賦值"="兩遍加空格
  給出多引數時,逗號後面空格再寫下一項
    class Course(models.Model):
    # Course即資料庫表名,django中均繼承自models.Model
      name = models.CharField(max_length=50, verbose_name=u"課程名")
      # CharField指該列為char型別,verbose_name指該列對應名稱,字首u指進行unicode編碼
      detail = models.TextField(verbose_name=u"課程詳情")
      # detail為文字域
      learn_times = models.IntegerField(default=0, verbose_name=u"學習時長(分鐘)")
      image = models.ImageField(upload_to="courses/%Y/%m",verbose_name=u"封面圖片", max_length=100)
      # upload_to指該圖片的url地址
      add_time = models.DateTimeField(default=datetime.now, verbose_name=u"新增時間")
      # default=datetime.now指預設為當前時間
    
      class Meta:
      # Meta前面空一行
          verbose_name = u"課程"
          # verbose_name即對該model的名字進行設定
          verbose_name_plural = verbose_name
          # verbose_name_plural是對model的複述,如果註釋以上語句,則系統進行解析時會自動在verbose_name後加上's'

過載model中class的__unicode__(def)方法可以自定義該model的"縮寫"顯示格式

django在模板引擎中提供了value的default_if_none:'' 代表如果該值為none,則不顯示








踩過的坑
一、
    繼承自AbstractUser的UserProfile類,在用admin新增使用者時出現錯誤:1452, 'Cannot add or update a child row: a foreign key constraint fails是因為在第一次做資料庫修改時,必須在做任何資料遷移之前做makemigrations命令。
    解決辦法:刪庫-->重新建立superuser-->makemigrations-->migrate即可
二、django裡的"計算機玄學"
    email_send.py中,傳送驗證碼型別為更新使用者郵箱時,若給形參send_type傳輸"update_email"時,則出現data too long異常,郵件始終無法發出,而改為update時,則沒有錯誤



模板引擎
    for迴圈中有存在內建的迴圈記數變數{{ forloop.counter }}可調出(從1開始)

相關文章