Django基础
https://docs.djangoproject.com/zh-hans/2.0/
安装Django
pip install django==2.0
# 下载比较慢的同学可以换个源下载
pip install django==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
创建项目
django-admin startproject mysite
# 创建虚拟环境
cd mysite
python -m venv venv
目录结构
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
-
manage.py
管理
django
项目的命令行工具,manage.py
就是django-admin
, 只是他们有以下区别django-admin
会被加入到环境变量当中, 所以我们可以在任意目录下调用.manage.py
只能在该项目下使用.
-
mysite
(项目名)实际业务逻辑编写, 项目配置, 路由管理的地方.
-
__init__.py
让
Python
将当前目录识别为一个包. -
settings.py
项目的配置文件.
-
wsgi.py
web server gateway interface
web服务网关接口.wsgi
只是一个协议, 它确立了两个规范:- 我们可以在服务器下开启多个web服务应用, 确定客户端请求如何到达服务应用的规范.
- 服务应用如何把处理的结果返回.
-
启动项目
-
创建一个应用
创建的应用才是真正处理请求和编写业务逻辑的地方.
python manage.py startapp polls
-
启动项目
# 5000为指定的端口, 不指定端口默认为8000 python manage.py runserver 5000
MTV模型
-
Model
django
提供了一个抽象的模型层, 目的是为了构建和操纵当前web应用的数据.简单地说, model层就是用来和数据库进行交互的.
django最出名的就是它的orm
-
orm
object relation mapping
对象关系映射orm自动地根据对象在数据库中进行操作. orm使得我们不用去操心数据表的建立和修改, 数据的CRUD, 只关心逻辑层的处理
-
-
Template
View将数据传递给模板层进行渲染, 之后将渲染好的页面返回到客户端.
模板层提供了一个对设计者友好的语法用于渲染向用户呈现的信息.
类似PPT模板
-
View
视图层, 负责处理用户的请求并返回响应.
模板层进行渲染, 之后将渲染好的页面返回到客户端.模板层提供了一个对设计者友好的语法用于渲染向用户呈现的信息.
类似PPT模板
-
View
视图层, 负责处理用户的请求并返回响应.
https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial01/
创建视图
-
视图就是处理客户端请求的地方
views.py
def index(request): """ request 就是作为参数传递进来的请求对象 :param request: :return: HttpResponse 处理完请求的返回对象 """ return HttpResponse("Hello world. You're at the polls index.")
-
解决不同请求调用不同的处理方法, 需要通过路由
-
创建应用的路径管理
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
-
将应用的路径管理添加到全局配置当中
from django.urls import path, include urlpatterns = [ path('polls/', include("polls.urls")), ]
-
创建模型
-
数据库配置
settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'polls', 'USER': 'root', 'PASSWORD': 'qwe369', 'HOST': '127.0.0.1', 'PORT': '3306' } }
-
修改连接数据库的客户端
mysite\__init__.py
import pymysql pymysql.install_as_MySQLdb()
-
-
初始化数据库
-
新建数据库
polls
-
完成第一次迁移, 生成初始的管理表
python manage.py migrate
-
-
创建模型
from django.db import models # Create your models here. class Question(models.Model): question_text = models.CharField(max_length=200) pub_data = models.DateTimeField('date published') class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
-
激活模型
-
激活APP
settings.py
INSTALLED_APPS = [ 'polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib.auth', ... ]
-
同步本地模型修改(类似git commit)
python manage.py makemigrations 应用名
- 会在当前应用
migrations
目录下生成响应的记录文件
- 会在当前应用
-
正式进行数据库同步
python manage.py migrate
-
管理后台
-
创建管理员
python manage.py createsuperuser
-
向管理页面加入投票应用
from django.contrib import admin # Register your models here. from .models import Question admin.site.register(Question)
遇到修改后模板文件没有变化的情况, 要想到去清除浏览器缓存.
视图层返回类型
- 简单文本
- 文件
- html
- css
- js
- 视频文件, 音频文件
- JSON数据格式
路由配置
-
URL匹配
path('<int:question_id>/', views.detail, name='detail'),
- int表示类型
- question_id表示传递的参数名
-
URL配置
-
ROOT_URLCONF
设置主URL配置文件.
-
模板
def index(request):
"""
request 就是作为参数传递进来的请求对象
:param request:
:return: HttpResponse 处理完请求的返回对象
"""
latest_question_list = Question.objects.order_by('-pub_date')[:5]
context = {
'latest_question_list': latest_question_list,
}
return render(request, 'polls/index.html', context)
重定向
-
当需要对用户不同的操作做不同结果的渲染时, 需要用到重定向. 可以简单理解为当前网址自动帮你跳转到另外一个网址.
return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))
通用视图
通用视图将常见的模式抽象化,可以使你在编写应用时甚至不需要编写Python代码。
通用视图也是未来我们学习restful api的雏形.