Django 千鋒培訓讀書筆記
https://www.cnblogs.com/fengbo1113/p/8547302.html
https://www.bilibili.com/video/av17879644/?p=1
切換到創建項目的目錄 cd C:\Users\admin\Desktop\DjangoProject
創建名爲project的項目命令 django-admin startproject project
注:所有路徑不要有中文
切換到目錄cd C:\Users\admin\Desktop\DjangoProject\project
目錄層級說明:manage.py 一個命令行工具,可以讓我們用多種方式對Django項目進行交互
__init__.py 一個空文件,它告訴Python這個目錄應該被看做一個包
settings.py 項目的配置文件(主要處理文件)
urls.py 項目的url聲明 (主要處理文件)
wsgi.py 項目與WSGI兼容的Web服務器入口
配置數據庫 Django默認使用SQLite數據庫
在settings.py文件中通過DATABASES選項進行數據庫配置
配置MySQL Python3.x中安裝的是PyMySQL
在__init__.py文件中寫入兩行代碼import pymysql
pymysql.install_as_MySQLdb()
以數據庫sunck爲例進行示範:對settings.py中的DATABASES進行設置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "sunck",
'USER': "root",
'PASSWORD': "admin123",
'HOST': "localhost",
'PORT': "3306"
}
}
創建應用--在一個項目中可以創建多個應用,每個應用進行一種業務處理
打開CMD,進入project(目錄名)的目錄下,輸入命令創建名爲myApp的app:
python manage.py startapp myAPP
myAPP目錄說明
admin.py 進行站點配置
models.py 創建模型
views.py 創建視圖
激活應用 在settings.py文件中,將myApp應用加入到INSTALLED_APPS選項中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myApp',
]
定義模型 概述:有一個數據表就對應有一個模型
在models.py文件中定義模型
引入:from django.db import models
模型類要繼承models.Model類
示例:
class Grades(models.Model):
gname = models.CharField(max_length=20)
gdate = models.DateTimeField()
ggirlnum = models.IntegerField()
gboynum = models.IntegerField()
isDelete = models.BooleanField(default=False)
class Students(models.Model):
sname = models.CharField(max_length=20)
sgender = models.BooleanField(default=True)
sage = models.IntegerField()
scontend = models.CharField(max_length=20)
isDelete = models.BooleanField(default=False)
sgrade = models.ForeignKey("Grades", on_delete=models.CASCADE,)
說明:
不需要定義主鍵,在生成時自動添加,並且值爲自動增加
在數據庫中生成數據表
生成遷移文件
執行 python manage.py makemigrations 在migrations目錄下生成一個遷移文件,此時數據庫中還沒有生成數據表
執行遷移
執行 python manage.py migrate 相當於執行MySQL語句創建了數據表
測試數據操作
進入到python shell
執行 python manage.py shell
引入包
from myApp.models import Grades, Students
from django.utils import timezone
from datetime import *
查詢所有數據
類名.objects.all()
示例: Grades.objects.all()
添加數據
本質:創建一個模型類的對象實例
示例:CMD窗口下:
grade1 = Grades()
grade1.gname = "python04"
grade1.gdate = datetime(year=2017, month=7, day=17)
grade1.ggirlnum = 3
grade1.gboynum = 70
grade1.save()
查看某個對象
類名.objects(pk=索引號)
示例:
Grades.objects.get(pk=2)
Grades.objects.all()
修改某個數據
模型對象屬性 = 新值
示例:
grade2.gboynum = 60
grade2.save()
刪除數據
模型對象.delete()
grade2.delete()
注意:這是物理刪除,數據庫中的相應數據被永久刪除
關聯對象
示例:
stu = Students()
stu.sname = "Xue Yanmei"
stu.sgender = False
stu.sage = 20
stu.scontend = "I am Xue Yanmei"
stu.sgrade = grade1
stu.save()
獲得關聯對象的集合
需求:獵取python04班級的所有學生
對象名.關聯的類名小寫_set.all()
示例:grade1.students_set.all()
需求:創建曾志偉,屬於python04班級
示例:
stu3 = grade1.students_set.create(sname=u'Zhen Zhiwei',sgender=True,scontend=u"I am Zhen Zhiwei",sage=45)
注意:這樣創建的數據直接被添加到了數據庫當中。
啓動服務器:
格式:python manage.py runserver ip:port
注意:ip可以不寫,不寫代表本機ip
端口號默認是8000
python manage.py runserver
說明:
這是一個純python編寫的輕量級web服務器,僅僅在開發測試中使用這個
Admin站點管理:
概述:
內容發佈:負責添加,修改,刪除內容的
公告訪問
配置Admin應用:
在settings.py文件中的INSTALLED_APPS中添加'django.contrib.admin',
這條默認是添加好的。
創建管理員用戶:
在項目目錄下執行 python manage.py createsuperuser
依次輸入賬號名,郵箱,密碼即可完成用戶創建
登陸:
http://127.0.0.1:8000/admin/
漢化:
把project\settings.py
中作如下設定:LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
管理數據表:
修改 myAPP\admin.py 如下:
from django.contrib import admin
# Register your models here.
from .models import Grades, Students
# 註冊
admin.site.register(Grades)
admin.site.register(Students)
自定義管理頁面:
屬性說明
# 列表頁屬性
list_display = [] # 顯示字段設置
list_filter = [] # 過濾字段設置
search_fields = [] # 搜索字段設置
list_per_page = [] # 分頁設置
# 添加,修改頁屬性
fields = [] # 規定屬性的先後順序
fieldsets = [] # 給屬性分組 注意:fields與fieldsets不能同時使用
屬性示例:
# 列表頁屬性
list_display = ['pk', 'gname', 'gdate', 'ggirlnum', 'gboynum', 'isDelete']
list_filter = ['gname']
search_fields = ['gname']
list_per_page = 5
# 添加,修改頁屬性
# fields = ['ggirlnum', 'gboynum', 'gname', 'gdate', 'isDelete']
fieldsets = [
("num",{"fields":['ggirlnum', 'gboynum']}),
("base", {"fields":["gname", "gdate", "isDelete"]}),
]
關聯對象:需求:在創建一個班級時可以直接添加幾個學生
class StudentsInfo(admin.TabularInline):# 可選參數admin.StackedInline
model = Students
extra = 2
class GradesAdmin(admin.ModelAdmin):
inlines = [StudentsInfo]
布爾值顯示問題示例:
class StudentsAdmin(admin.ModelAdmin):
def gender(self):
if self.sgender:
return "男"
else:
return "女"
# 設置頁面列的名稱
gender.short_description = "性別"
list_display = ['pk', 'sname', 'sage', gender,
'scontend', 'sgrade', 'isDelete']
list_per_page = 10
admin.site.register(Students, StudentsAdmin)
執行按鈕位置:
class StudentsAdmin(admin.ModelAdmin):
...snip...
actions_on_top = False
actions_on_bottom = True
admin.site.register(Students, StudentsAdmin)
使用裝飾器完成註冊:
@admin.register(Students)
class StudentsAdmin(admin.ModelAdmin):
def gender(self):
...snip...
actions_on_top = False
actions_on_bottom = True
視圖的基本使用
概述:
在Django中,視圖是對web請求進行迴應
視圖就是一個python函數,在views.py文件中定義。
定義視圖:
示例:在myApp\views.py中寫入
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("Sunck is a good man")
配置url:方法一:path方法:
修改project目錄下的urls.py文件:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myApp.urls')),
]
在myApp應用目錄下創建urls.py文件:
from django.urls import path, include
from . import views
urlpatterns = [
path('',views.index),
]
配置url:方法二:url方法:
修改project目錄下的urls.py文件:
from django.contrib import admin
from django.conf.urls import url,include
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('myApp.urls')),
]
在myApp應用目錄下創建urls.py文件:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index),
]
模板的基本使用:
概述:模板是HTML頁面,可以根據視圖中傳遞過來的數據進行填充
創建模板:
創建templates目錄,在目錄下創建對應項目的模板目錄(project/templates/myApp)
配置模板路徑:
修改settings.py文件下的TEMPLATES下的'DIRS'爲'DIRS': [os.path.join(BASE_DIR, 'templates')],
定義grades.html與students.html模板:
在templates\myApp\目錄下創建grades.html與students.html模板文件
模板語法:
{{輸出值,可以是變量,也可以是對象,屬性}}
{%執行代碼段%}
http://127.0.0.1:8000/grades
寫grades.html模板:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>班級信息</title>
</head>
<body>
<h1>班級信息列表</h1>
<ul>
<!--[python04, python05, python06]-->
{%for grade in grades%}
<li>
<a href="#">{{grade.gname}}</a>
</li>
{%endfor%}
</ul>
</body>
</html>