1.Django的命令:
- 下载
- pip install django==1.11.16
- pip install django==1.11.16 -i 源
- 创建项目
- django-admin startproject 项目名
- 启动项目
- cd 项目目录下 找到manage.py
- python manage.py runserver # 127.0.0.1:8000
- python manage.py runserver 80 # 127.0.0.1:80
- python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80
- 创建一个APP
- python manage.py startapp app名称
- 注册
- 数据库迁移
2.Django的配置
- 注释一个CSRF的中间件 可以提交POST
- databases 数据库
- ENGINE : mysql
- NAME : 数据库的名称
- HOST:主机的IP
- PORT:3306
- USER: 用户名
- PASSWORD: 密码
- 静态文件的配置
- STATIC_URL = ‘/static/’ # 别名
- STATICFILES_DIRS = [
os.path.join(BASE_DIR,‘static’)
]
- app
- INSTALLED_APPS = [
‘app01’ ,
‘app01.apps.App01Config’
]
- INSTALLED_APPS = [
- TEMPLATES 模板相关的配置
- DIRS [ os.path.join(BASE_DIR,‘templates’)]
3.Django使用mysql数据库的流程:
-
创建一个mysql数据库
-
在settings中进行配置
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘bookmanager’,
‘HOST’: ‘127.0.0.1’,
‘PORT’: 3306,
‘USER’: ‘root’,
‘PASSWORD’: ‘’,} }
-
在与settings同级目录下的init的文件中写:
import pymysql
pymysql.install_as_MySQLdb() -
在app下的models中写类(models.Model)
class Publisher(models.Model): # app01_publisher
pid = models.AutoField(primary_key=True) # pid 主键
name = models.CharField(max_length=32, unique=True) # 出版社名称def __str__(self): return self.name class Book(models.Model): title = models.CharField(max_length=32, unique=True) # 书籍的名称 publisher = models.ForeignKey('Publisher', on_delete=models.CASCADE) # 关联了出版社 def __str__(self): return self.title class Author(models.Model): name = models.CharField(max_length=32, unique=True) # 作者的名字 books = models.ManyToManyField('Book') # 表示作者和书籍 多对多的关系 # books = models.ManyToManyField('Book', through='Author_book',) # 表示作者和书籍 多对多的关系 def __str__(self): return self.name
5.数据库迁移的命令
4.ORM的对应关系
类 —— 》 表
对象 ——》 记录(数据行)
属性 ——》 字段
5.ORM操作
- 查询
- models.Publisher.objects.all() # 查询所有的数据 ——》 QuerySet 对象列表
- models.Publisher.objects.get() # 获取满足条件的一个对象 ——》 单独的对象
- models.Publisher.objects.filter() # 获取满足条件的所有对象 ——》对象列表
- models.Publisher.objects.all().order_by(‘id’) # 排序 —— 》 对象列表
- pub_obj.pk ——》 主键
- pub_obj.name
- 外键
- book_obj.publisher ——》 关联的对象
- book_obj.publisher_id ——》从book表中获取关联对象的ID
- book_obj.publisher.name ——》 关联的对象的属性
- 多对多
- author_obj.books ——》 管理对象
- author_obj.books.all() ——》 关联的所有的对象 对象列表
- book_obj.author_set ——》管理对象、
- 增加
- models.Publisher.objects.create(name=‘xxx’) ——》 对象
- 外键
- models.Book.objects.create(title=‘xxx’,publisher=pub_obj)
- models.Book.objects.create(title=‘xxx’,publisher_id=pub_obj.id)
- 多对多
- models.Author.objects.create(name=‘xxxx’) ——》 author_obj
- author_obj.books.set([多个要关联对象的id,])
- author_obj.books.set([多个要关联对象,])
- 删除
- models.Author.objects.get(id=1).delete()
- models.Author.objects.filter(id=1).delete()
- 修改
- pub_obj.name = ‘new_xxxx’
- pub_obj.save()
- 外键
- book_obj.title = ‘xxxx’
- book_obj.publisher = pub_obj 或者 book_obj.publisher_id = pub_obj .id
- book_obj.save()
- 多对多
- author_obj.name = ‘new_name’
- author_obj.save()
- author_obj.books.set([多个要关联对象,]) author_obj.books.set([多个要关联对象的id,])
6.request
- request.method ——》 请求方式 8 种 GET/POST
- request.GET ——》 url上的参数 xxxx/?id=1&name=aelex {} [] request.GET.get(‘id’)
- request.POST ——》 form表单提交的POST的数据 {} [] request.POST.get()
7.函数的返回值
-
HttpResponse(‘字符串’) ——》 返回字符串
-
render(request,‘模板的文件名’,{k1:v1}) ——》返回一个完整的页面
-
redirect(’‘跳转的地址’’) ——》 重定向 响应头 Location : ‘跳转的地址’
1.MVC和MTV -
MVC
-
C Controller : 逻辑的控制
-
M Model : 存取数据
-
V View : 信息的展示
-
MTV
- M : model ORM操作
- T: Template 模板
- V: View 业务逻辑
2.变量
{{ 变量 }} 使用.来获相关属性和方法
3.过滤器
语法: {{ value|filter_name:参数 }} # 参数最多只有一个
-
内置过滤器
-
default 提供默认值
{{ kong|default:‘nothing’ }} -
date 日期格式化
{{ now|date:‘Y-m-d H:i:s’ }}settings中可配置全局的日期时间格式化 USE_L10N = False DATETIME_FORMAT = 'Y-m-d H:i:s'
-
safe 不进行转义
{{ js|safe }} # 告诉Django 前面的内容是安全的,不必转义
-
-
自定义filter
- 定义
-
在APP下创建一个叫templatetags的python包; 不能变的,必须是包,名字必须是templatetags
-
在包中创建一个py文件 my_filters;
-
在py文件中写代码
from django import templateregister = template.Library() # register的名字不能改
-
写函数
@register.filter
def add_dsb(value, arg):
return “{}_{}”.format(value, arg) -
给定义的函数加装饰器
@register.filter
def add_dsb(value, arg):
-
- 使用
在模板中使用:- 导入定义的文件
{% load my_filter %} - 使用过滤器
{{ name|add_dsb:‘very_dsb’ }}
- 导入定义的文件
- 定义
4.标签
{% csrf_token %}
添加在form表单中 就可以提交POST请求
5.母版和继承
- 母版
就是一个普通的HTML文本,将多个页面公共部分的内容提取出来,在页面中定义多个block块
{% block content %}
{% endblock %}- 继承
在子页面中,继承母版 {% extends ‘base.html’ %}
可以重新书写block块中内容 - 注意事项
-
{% extends 'base.html' %} 写在第一行,上面不写内容
- 要修改的 内容写在block块中,写在外面不显示
- {% extends ‘base.html’ %} base.html 记得带上引号,不然当做变量去查找
- 定义多个block块,一般要定义上 css和js
- 继承
6.组件
把多个页面公用的HTML代码放在一个HTML文件中 —— 》组件 nav.html
使用: {% include ‘nav.html’ %}
7.静态文件相关
{% load static %}
{% static ‘静态文件相对路径’ %} ——》 获取到别名,跟后面的参数进行拼接
{% get_static_prefix %} ——》 获取到别名
<link rel="stylesheet" href="{% get_static_prefix %}plugins/bootstrap-3.3.7/css/bootstrap.css">
8.自定义inclusion_tag