第一章 (构建django框架)
建立虛拟环境+django项目的总文件夹建立虛拟环境建立项目project启动开发服务器建立APP小结 第二章(Views and URLconfs)
建立APP注册APP逻辑思路代码 第三章(Templates)
Templates文件夹、静态html逻辑思路代码 第四章(Models)
设置资料库(默认使用SQLite)逻辑思路代码第五章Django API 来与资料库互动 (CRUD)
第一章 (构建django框架) 建立虛拟环境+django项目的总文件夹mkdir MyDjangoPro #建立一个名为MyDjangoPro的资料夹 cd MyDjangoPro #換至剛剛建立的目錄下建立虛拟环境
python3 -m venv djvenv #建立虛拟环境
结果如下:
source djvenv/bin/activate #切换虚拟环境
结果如下:
django-admin.py startproject mysite # mysite 为django项目名
mysite项目文件结构如下:
mysite/ ├── mysite │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py启动开发服务器
python manage.py runserver
浏览器输入:http://127.0.0.1:8000/
结果如下:
python manage.py startapp trips # trips 为APP名
APP文件结构如下:
trips ├── __init__.py ├── admin.py ├── migrations ├── models.py ├── tests.py └── views.py
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#这里是注册APP
'trips',
)
小结
mysite项目 包含 一个mysite配置文件夹 + trips APP文件夹
mysite ├── mysite │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── trips │ ├── __init__.py │ ├── admin.py │ ├── migrations │ ├── models.py │ ├── tests.py │ └── views.py └── manage.py第二章(Views and URLconfs) 建立APP
python manage.py startapp trips # trips 为APP名注册APP
打开 mysite/settings.py,找到 INSTALLED_APPS,添加 APP名:
逻辑思路处理 request 的流程如下:
Request: 浏览器 -----> urls.py ----> views.py
Response : 浏览器 <---- views.py
说明:
1、浏览器送出 HTTP Request
2、Django 依据 URL Conf 分配至对应的 View
3、View 进行资料库的操作或其他运算,并回传 Http Response 对象
4、浏览器依据 HTTP Response,显示网页画面
# trips/views.py
from django.shortcuts import render
from django.http import HttpResponse #新增
def hello_world(request): #新增
return HttpResponse("Hello World!")
# mysite/urls.py
from django.contrib import admin
from django.urls import path
from trips.views import hello_world #新增
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', hello_world), #新增
]
加上 HTML / CSS & 动态内容,views.py改为下面代码
# trips/views.py
from django.shortcuts import render
from django.http import HttpResponse
from datetime import datetime
def hello_world(request):
output = """
Hello World! {current_time}
""".format(current_time=datetime.now()) # datetime.now() 结果:取得现在的时间2022-03-15 14:49:32.434372
return HttpResponse(output)
"""
知识点
1、 '''...''' (三个双引号或三个单引号) 是字串的多行写法
2、 import datetime 时间模组 datetime.now()取得现在的时间
3、 format() 格式化字串,将 current_time 的值,代入 html的 {current_time}
"""
第三章(Templates)
Templates文件夹、静态html
在总mysite项目下,新建Templates文件夹,用于装静态html。
在Templates下,新建hello_world.html
hello_world.html -----> views.py ----> 浏览器
将html这个模板给views加工数值,传给浏览器显示
注意:新建Templates文件夹要在settings.py登记路径
#添加os模块
import os
#添加模板的路径
TEMPLATES = [
{
#'DIRS': [],
'DIRS': [ os.path.join(base_DIR, 'templates').replace('\', '/'),],
},
]
hello_world.html
I come from template!!
Hello World!
{{ current_time }}
views.py
# trips/views.py
from django.shortcuts import render
from django.http import HttpResponse
from datetime import datetime
def hello_world(request):
return render(request,'hello_world.html',{'current_time': datetime.now()})
"""
知识点
render(request, 'hello_world.html', {'current_time': datetime.now()} )
render(request, template_name, dictionary )
request -- HttpRequest 对象
template_name -- 要使用的 Template
dictionary -- 包含要新增至 Template 的变数
render :产生 HttpResponse 对象。
"""
结果是:
Models数据模型
设置资料库(默认使用SQLite)为了开发方便,我们使用 Django 预设的资料库 SQLite。
打开 settings.py,看看 DATAbaseS 的设定。
修改设置,就可以轻易地从 SQLite 转换到 MySQL、PostgreSQL、或是 Oracle
settings.py设置数据库 -----> models.py -----> 生成迁移,执行迁移
注意:使用mysql,还需设置App的admin.py
settings.py
DATAbaseS = {
#设置为SQLite
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': base_DIR / 'db.sqlite3',
}
#设置为mysql
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'books', # books是数据库的名称(需提前建立数据库)
'HOST': 'localhost',
'PORT': '3306',
'USER': 'root', # 数据库用户账号名
'PASSWORD': '123', # 数据库用户密码
#'OPTIONS': {'charset': 'utf8'},
}
}
admin.py(使用mysql时,要设置)
from django.contrib import admin from .models import BookInfo #BookInfo是数据表名 from 同级的模型.py import 数据表(class后面的名) admin.site.register(BookInfo) admin.site.register(数据表)
models.py
# trips/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField(blank=True)
photo = models.URLField(blank=True)
location = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
生成迁移的数据库(建立迁移文件) python manage.py makemigrations 迁移数据库(动作) python manage.py migrate第五章Django API 来与资料库互动 (CRUD)
Create (新增)、Read (读取)、Update (修改)、Delete (删除)
进入Django Shell
python manage.py shell
models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField(blank=True)
photo = models.URLField(blank=True)
location = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title (加了之后,Post 已经被重新定义成显示标题)
Create
· from APP.模型 import class名(数据表)
·from trips.models import Post
·Post.objects.create(title=‘My First Trip’, content=‘肚子好饿,吃什麽好呢?’, location=‘台北火车站’)
·Post.objects.create(title=‘自定义文字’, content=‘自定义文字’, location=‘自定义文字’)
Read
from trips.models import Post
显示所有的 Post
·Post.objects.all()
显示某个资料
Post.objects.get(id=1)
显示除了gt=1的资料
Post.objects.filter(id__gt=1)
models.py
def str(self):
return self.title (加了之后,Post 已经被重新定义成显示标题)
Update
from trips.models import Post
Post.objects.all()
posts = Post.objects.filter(id__lt=3)
posts
posts[0].location
posts[1].location
posts.update(location=‘捷运大安站’)
posts[0].location
posts[1].location
Delete
posts = Post.objects.filter(id__lt=3)
posts.delete() #刚刚的那两笔 Post 删除
Post.objects.all()



