Django
- Python下的一个Web框架,最好用的一个,是开放源代码的Web应用框架。
- 遵守BSD版权,采用MVC的软件设计模式,M模型 V视图 C控制器
- C 处理用户的请求
- M 模型对象在数据库增删改查
- V 返回图形界面
- 流程 U –> C –> M –> C –> V
Django模式简介
- M V T
- Model 负责业务与数据库(orm)的对象
- View 负责业务逻辑并适当调用Model 和Template
- Template 负责吧页面渲染展示给用户
- 注意:Django中还有一个url分发器,也叫路由,主要用于将不用的URL交给不同的view的处理
- 流程 U –> (urls) –> C –> M –> C –> T
扩展概念
- MVC
- MVT
- M : Model 数据库的表
- V : Views 业务逻辑处理,是Model 和 Views的桥梁,还有一个urls的路由,将url的请求分发给不同的Views并进行相关的业务逻辑处理
- T : Templates 负责把渲染的也买你及特定的内容展示给用户
- B/S 浏览器 / 服务器
- C/S client 客户端 / server服务器
如何手动安装python的坏境(windows)
- pip3 install virtualenv 安装虚拟坏境, 用于将环境和项目隔离开,以免相互影响
- virtualenv –no-site-packages -p python3的路径 env 安装坏境到指定目录,安装env坏境。
- 进入env/Scripts中,输入activate,进入环境中,执行 pip install pymysql 安装数据库,pip install django==1.11 加等号相当于安装哪个版本
- 退出环境 deactivate
- pip install django==1.11 加等号相当于安装哪个版本
Linux 上安装Django
- yum安装方法 (Centos Linux)
- yum install python-setuptools
- easy_install django
- pip 安装方法
- pip install Django
- source bin/activate 退出 source deactivate
Djagno创建第一个项目
Django 管理工具 django-admin.py
创建第一个项目
- django-admin startproject hello_world 创建
- 创建之后可以进入pycharm中,进行开发,但须配置坏境
- file – settings – Project interpreter –用自己配置的坏境。
- cd hello_world/
- tree 查看
- python manage.py runserver id:端口 启动服务器,让任何人可以连接
- 可在浏览器输入IP和端口号登入
- settings
- DEBUG 开发时为True, 上线时为False
- LANGUAGE_CODE = ‘zh-hans’ 修改为中文
- TIME_ZONE = ‘UTC’ 相比北京时间少8个小时。 改为 ‘Asia/Shanghai’
- python manage.py startapp appname 创建app
- app的结构
- init.py:初始化
- admin.py:管理后台注册模型
- apps.py:settings.py里面注册app的时候推荐使用
- from app.apps import AppConfig
- AppConfig.name
- models.py: 写模型的地方
- views.py: 写处理业务逻辑的地方
- 展示网页方法
- 没有创建app时,启动主应用,manage.py,默认开启8000端口,可以通过id:8000访问。
- 创建app时,例如创建一个app.
- app里:
- 创建并在urls里写入搜索连接
- 在views里写入 urls关联的在页面显示的内容
- 主文件里;
- settings里,在INSTALLED_APPS里添加app名字,
- urls中,填入app搜索的地址连接,变为去app里搜索。
- 最后即可通过id:端口/app/关键字
- 迁移数据库
- 首先创建一个app,名字称为stu.
- stu里:
- 创建并在urls里写入搜索连接
- 在views里写入 urls关联的在页面显示的内容,写入数据库的内容。
- 在models里写入将写入数据库的内容的类型。
- 主文件里:
- 在init里,导入数据库
- settings里,在INSTALLED_APPS里添加app名字,在DATABASES里写入连接数据库的操作。
- urls中,填入app搜索的地址连接,变为去app里搜索。
- 在数据库只需建立一个空数据库,让其连接,即可通过连接修改内容了。
- python manage.py makemigrations
- python manage.py migrate
- 最后即可通过id:端口/app/关键字
- 连接完数据库之后,python manage.py createsuperuser 创建超级用户
- admin 用户名 : xxx
- email: [email protected]
- password: xxx
- 通过ip:port/admin登录
- 可以通过网页实现增删查改
通过app的admin.py中输入语句来修改显示。
- 两种注册方式:
- admin.site.register(数据库名,修改的类名), classStudentAdmin(admin.ModelAdmin)
- @admin.register(Student) class StudentAdmin(admin.ModelAdmin)
- list_display = [”] 要展示的字段
- list_filter = [”] 过滤器
- list_fields = [”] 搜索器
- list_per_page = num 分页,一页展示几行数据
- 两种注册方式:
ORM 对象关系映射,翻译机
模型字段
- CharField(): 字符串
max_length:长度 - BooleanField: 布尔类型 1,0
- DateField: 年月日,日期
auto_now_add: 第一次创建的时候赋值
auto_now: 每次修改的时候赋值。 DateTimeField:年月日 时分秒
autoField: 自动增长
DecimalField():
models.DecimalField(max_digits=3,decimal_places=1) 表示最大为99.9,最小0.01
max_digits = 总位数
decimal_places = 小数点后多少位TextField: 存文本信息,图片,图片地址,文件,空间特别大。
- IntegerField: 整数
FloatField: 浮点
FileField: 文件上传字段
- ImageField: 上传图片
upload_to = “” 指定上传图片的路径
- CharField(): 字符串
模型参数
- default:默认
- null: 设置为空,针对数据库中该字段是否可以为空,
blank: 设置是否为空,针对表单提交,该字段是否可以为空,
primary key 创建主键
- unique: 唯一
修改字段名
- alter table table_name change 原名称 修改后名称 类型
- object对象
通过模型objects来实现数据的CRUD操作 - 获取所有学生
- select * from student:
- 模型 objects.all()
- 获取所有女生的信息
- filter(过滤条件)
- get(过滤条件)
- 区别:
- get:返回一个满足条件的对象,没有满足条件的,则直接报错DoesNotExit的异常,如果查询结果有多个数据的话,就报MulitiObjectsReturned的错。
- filter(): 返回满足条件的值
- first(): 返回第一条数据
- last(): 返回最后一条数据
- count(): 求和
- gte=” 大于等于 gt 大于 age__gte=xx;
- lt lte: 小于 小于等于
- from django.db.models import F,Q
- Q 用于条件筛选,& and | or ~ !
- F
视图和url配置
- 在HelloWorld目录新建一个view.py文件,
- from django.http import HttpResponse
- def hello(request):
return HttpResponse(“Hello world!”)
- 绑定URL与视图函数,打开urls.py,修改代码如下
- from django.conf.urls import url
- from . import view
- urlpatterns = [
url(r’^$’, view.hello),
]
- 访问开发服务器,视图已经改变
- url()函数, 可接受四个参数,前两个为必选,其他为可选
- regex: 正则表达式,与之匹配的URL会执行对应的第二个参数view
- view; 用于执行与正则表达式匹配的URL请求
- kwarge;视图使用的字典类型的参数
- name: 用来反响获取URL
模板
- 模板是一个文本,用于分离文档的表现形式和内容
模板应用实例
- 在HelloWorld目录下创建templates目录,并建立hello.html文件,
{{hello}}
- 修改设置里的路径,setting.py
- 修改TEMPLATES中的DIRS为 [BASE_DIR+”/templates”,]
- 修改view.py,增加一个新的对象,用于向模板提交数据
- # *- coding:utf-8 _*
- # from django.http import HttpResponse
- from django.shortcuts import render
- def django.http import render
- def hello(request):
context = {}
context[‘hello’] = ‘Hello World!’
return render(request, ‘hello.html’, context)
模板标签
if / else 标签
- {% if condition %}
… display
{% endif %} - {% if condition1 %}
… display 1
{% elif condition2 %}
… display 2
{% else %}
…display 3
{% endif %} - for 标签
- for x in y
- ifequal / ifnotequal 标签
- 注释标签 {#注释#}
- 过滤器 {{ name | lower}}
- include 标签 {% include “nav.html” %}
- 模板继承
Django 模型
- 支持多种数据库
数据库配置
- settings.py 中的 DATABASES修改信息
定义模型
创建APP
- 规定,要使用模型,必须创建一个app.
- django-admin.py startapp TestModel
- 修改TestModel/models.py
- from django.db import models
- class Test(mdels.Model):
name = models.CharField(max_length=20)
- 接着在settings.py中找到INSTALLED_APPS这一项,
- INSTALLED_APPS = (
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘TestModel’, # 添加此项
)
- 在命令中执行;
- python manage.py migrate 创建表结构
- python manage.py makemigrations TestModel 让Django知道我们做了变动
- python manage.py migrate TestModel 创建表结构
数据库操作
- 添加testdb.py,并修改urls.py’
添加数据
- 创建对象,执行save函数,
获取数据
更新数据
- save() update()
删除数据
- delete()
表单
- 交互行为
HTTP请求
GET 方法
POST 方法
Request 对象
QueryDict 对象
Django Admin 管理工具
激活管理工具
使用管理工具
复杂模型
自定义表单
内联(inline) 显示
列表页的显示
Django Nginx+uwsgi 安装配置
安装基础开发包
- Centos
- yum groupinstall “Development tools”
- yum install zlib-devel bzip2-devel pcre-devel openssl-devel
- ncurses-devel sqlite-devel readline-devel tk-devel