django回顧過程當中一些重要點總結

  • pycharm中將一段代碼總體左移 shift+tab,總體右移 tab
  • settings.py中配置templates和static文件夾的根目錄
    • 添加STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
    • TEMPLATES的DIRS也是這樣配置
    • 順便提一句html文件中要 {% load staticfiles %} 來加載靜態文件,樣式也是經過 <link rel="stylesheet" href="{% static 'css/style.css' %}">
  • models的經常使用字段類型 django模型的用法
models.CharField
    models.EmailField
    models.DateTimeField
    models.IPAddressField IP地址
    models.FileField 上傳文件類型
    models.ImageField 圖片
    models.IntegerField
  • 字段中經常使用的參數
    • max_length:像CharFiels必須指定長度
    • null=False:是否爲null,通常在Char和Text中不該該使用Null,而應該使用blank,null是純粹是數據庫的語法
    • blank=False:是否爲空
    • default:默認值,如default=」
    • verbose_name:設置字段名
    • primary_key=False:是否爲主鍵,若是不指定主鍵會默認表中增長一個主鍵 id
    • editable=True:是否能夠編輯,若爲False,則不會在後臺管理界面顯示
    • auto_now:Date和DateTime字段獨有,每次修改都會將當前時間更新進去,
      • 只有調用Model.save方法會調用,QuerySet.update方法將不會調用
    • auto_now_add:一樣Date和DateTime字段獨有,但只保留第一次提交時的時間
  • 模型和模型之間關係字段
    • OneToOneField:一對一
    • Foreignkey:外鍵,一對多
    • ManyToManyField:多對多
  • models更改後,必須再次經過makemigrations appname更新數據庫遷移文件
    返回結果也可知字段id
Migrations for 'message':
  message\migrations\0002_auto_20180806_2204.py
    - Remove field id from message
    - Add field object_id to message
    - Alter field address on message
    - Alter field email on message

如示增長主鍵 object_id(主鍵必需要指定默認值,否則報錯)css

You are trying to add a non-nullable field ‘object_id’ to message without a default;
we can’t do that (the database needs something to populate existing rows).html

  • 而後再migrate appname遷移數據庫
  • models中模型類中Meta類的定義數據庫

    • verbose_name
    • ordering:指定排序方式
    • db_table:指定表名(不指定,數據庫也會默認生成)
  • 數據庫表查詢(Django自帶了數據表查詢工具objects)django

    • 模型類:Message
    • Message.objects.all():返回全部Message對象(可迭代)
    • Message.objects.filter(name=’lzw’,address=’南昌’):查詢特定的對象,參數間的逗號表示and
  • 數據庫表增長數據app

    1. 方法一
      1. 建立Message對象message
      2. 對message各個屬性賦值
      3. 調用message.save()
    2. 方法二
      • Message.objects.create(各個屬性賦值)
    3. 方法三
      • Message.objects.get_or_create(name=’lzw’,age=20,。。。)
      • 這種方法是防止重複很好的方法,可是速度要相對慢些,返回一個元組,第一個爲Person對象,第二個爲True或False, 新建時返回的是True, 已經存在時返回False.
  • 數據表刪除數據函數

    • message.delete()
    • 使用很簡單,先查詢到特定的message對象,再調用delete方法
  • 數據表更改數據工具

    • message.update(address=’DaLian’)
    • 一樣是選出特色對象,並對某些屬性更改;也能夠多對個對象同時更改 Message.objects.all().update(address='BeiJing')
  • 如何處理Post提交的表單數據post

    • Django要求post提交form表單時必須在標籤中含有 {% csrf_token %}
    • post提交的數據會以字典形式返回,key就是模板中相應位置的name對應的值url

      <input id="name" type="text" name="name" class="error" placeholder="請輸入您的姓名"/>
    • Django經過判斷request的method屬性來判斷是POST仍是GET請求spa

      • request.method == 「POST」
    • 經過字典get()方法來獲取提交的數據
      • 如: request.POST.get('name',''),get第二個參數表示默認值
    • 而後再像上面所提的向數據表中增長數據同樣,將用戶提交信息註冊到數據表中
  • render可經過第三個字典參數向模板傳入所須要展現的數據
  • django提供的模板語言

    • {{ }}:顯示數據
    • {% if %}{% else %}{% endif %}
    • {% ifequal a b %}{% endifequal %}:判斷a是否等於b,等同於{% if a==b %}
    • {% url name [參數(可選)]%}:在模板中指定跳轉的url時,很是有用
      • name是urls.py中指定的url(regex,views.方法,name=’XXX’)
      • {% url ‘XXX’ %},好處在於若是regex更改,不須要修改模板中url相應寫法
      • 如:<form action="{% url 'get_form' %}" method="post" class="smart-green">
    • {% url namespace:name [參數(可選)]%}
      • 和上面的區別在於url()中還要指明namespace,便於區分不一樣APP下出現相同name的函數匹配
  • 模型類的內嵌Meta類的功能 Django中class Meta使用詳解

    • 用來定義模型類中一些行爲特性
    • 經常使用的一些選項
      • get_latest_by

    由於Django的管理方法中有個lastest()方法,就是獲得近期一行記錄。
    假設你的數據模型中有 DateField 或 DateTimeField 類型的字段。你可以經過這個選項來指定lastest()是依照哪一個字段進行選取的。

  • ordering:模型對象返回的記錄結果集是按照哪一個字段排序的,它能代替objects的order_by方法

    ordering=['order_date']
    //按訂單升序排列
    ordering=['-order_date']
    //按訂單降序排列,-表示降序
    ordering=['?order_date']
    //隨機排序,?表示隨機
    ordering = ['-pub_date', 'author']
    //對 pub_date 降序,而後對 author 升序
  • db_table:用於指定本身定義數據庫表名的
    若不提供該參數, Django 會使用 app_label + ‘_’ + module_name 做爲表的名字.
    若你的表的名字是一個 SQL 保留字, 或包含 Python 變量名不容許的字符–特別是連字符 –不要緊.
    Django 會自動在幕後替你將列名字和表名字用引號引發來.
  • verbose_name:給模型類起名
  • verbose_name_plural:這個選項是指定,模型的複數形式是什麼,若未提供該選項, Django 會使用 verbose_name + 「s」
  • 模型類中的 str(self)和 unicode(self)方法 [可參考]Python str(self)和unicode(self)
    • 就是爲了在後臺管理admin更好地顯示某些字段
    • 針對str,若是像是IntegerField的內容能夠如 return str(self.age) 之類的
  • 相關文章
    相關標籤/搜索