- 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
- 方法一
- 建立Message對象message
- 對message各個屬性賦值
- 調用message.save()
- 方法二
- Message.objects.create(各個屬性賦值)
- 方法三
- 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
- 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」
- 就是爲了在後臺管理admin更好地顯示某些字段
- 針對str,若是像是IntegerField的內容能夠如
return str(self.age)
之類的