框架
MVC和MTV框架
1. MVC
M: model 模型 对数据库进行操作
V:view 视图 给用户提供页面
C:controller 控制器 负责调度 传递指令
2. MTV:
M: model 模型 ORM 对数据库进行操作 ,相当于MVC中的model
T:template 模板 对HTML文件进行渲染 ,相当于MVC中的view
V: view 视图 函数 负责业务逻辑 ,相当于MVC中的controller
django命令
1. django的所有命令
1. 安装django
pip install django==1.11.15
2. 创建项目
django-admin startproject 项目名
3. 启动项目
cd 项目目录
python manage.py runserver # 127.0.0.1:8000
python manage.py runserver 80
python manage.py runserver 0.0.0.0:80
4. 创建APP
python manage.py startapp app01
注册APP
'app01.apps.App01Config'
5. 数据库迁移
python manage.py makemigrations # 检查models.py是否有变化,记录变化 app01/migrations
python manage.py migrate # 将变更记录同步到数据库中
2. django的配置
1. 注释csrf中间件 可以提交POST请求
2. 数据库的配置
ENGINE: mysql
NAME: 数据库名字
USER: 用户名
PASSWORD: 密码
HOST: ip
PORT: 3306
3. 静态文件的配置
STATIC_URL = '/static/' # 别名
STATICFILES_DIRS = [
os.path.join(BASR_DIR,'static'),
os.path.join(BASR_DIR,'static1'),
]
4. TEMPLATES DIRS os.path.join(BASR_DIR,'templates')
5. INSTALLED_APPS=[
'app01',
'app01.apps.App01Config'
]
3. 对象和数据库的对应关系
类 —— 》 数据表
对象 —— 》 数据行
属性 —— 》 字段
4. django使用mysql数据库流程:
1. 创建一个mysql数据库
2. settings中写配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'library',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
3. 告诉django使用pymysql的模块连接mysql数据库
在与settings同级的目录下的__init__.py中写代码:
import pymysql
pymysql.install_as_MySQLdb()
4. 在app01/models.py中写类(继承models.Model)
class Publisher(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32, unique=True)
class Book(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32, unique=True)
publisher = models.ForeignKey(to='Publisher', on_delete=models.CASCADE)
def __repr__(self):
return "<Book object: {} >".format(self.title)
class Author(models.Model):
name = models.CharField(max_length=32, unique=True)
books = models.ManyToManyField('Book')
def __repr__(self):
return "<Author object: {} >".format(self.name)
__str__ = __repr__
5. 执行数据库迁移的命令
python manage.py makemigrations
python manage.py migrate
5. ORM操作
1. 查
from app01 import models
models.Publisher.objects.get(id=1,name='xx') # 获取一个对象 —— 》一个对象
models.Publisher.objects.all() # 获取所有对象 ——》 queryset 对象列表
models.Publisher.objects.filter(id=1,name='xx') # 获取满足筛选条件的所有对象 ——》 queryset
models.Publisher.objects.all().order_by('-id')
属性:
pub_obj.id
pub_obj.name
外键:
book_obj.id
book_obj.title
book_obj.publisher ——》 书籍关联的出版社对象
book_obj.publisher_id ——》 书籍关联的出版社对象的id
多对多:
autho_obj.id
autho_obj.name
autho_obj.books ——》管理对象
autho_obj.books.all()
2. 增
pub_obj = models.Publisher.objects.create(name='新的出版社名字')
外键:
models.Book.objects.create(title='新的书名',publisher=pub_obj)
models.Book.objects.create(title='新的书名',publisher_id=pub_obj.id)
多对多:
autho_obj = models.Author.objects.create(name='作者名字')
autho_obj.books.set([1,3,5])
3.删
models.Publisher.objects.get(id=1,name='xx').delete()
models.Publisher.objects.all().delete()
4. 改
pub_obj.name = '新的名字'
pub_obj.save()
book_obj.title = '新的书名'
book_obj.publisher = pub_obj
# book_obj.publisher_id = 1
book_obj.save()
autho_obj.name = '新的名字'
autho_obj.save()
autho_obj.books.set([1,2,3])
6. request ——》 封装请求的所有内容
request.method ——》 请求的方式 GET POST
request.POST ——》 post请求提交的数据 字典 request.POST['id'] request.POST.get('id',)
request.GET ——》 URL的参数
127.0.0.1:80/del_book/?id=1&name=xxx
7. 函数的返回值
HttpResponse('字符串') ——》 页面显示字符串的内容
render(request,'模板的名字',{k1:v1}) ——》 整个HTML文件返回给浏览器
redirect('/index/') 跳转 重定向 响应头 location:/index/