MVC,MVT概念:
MVC:
M全拼model 主要封装数据库的访问,对数据库中的数据库进行增,删,改,查操作。
V全拼view用于封装结果,生成页面展示的的HTML内容。
C全拼controller用于接收请求处理业务逻辑与model和view进行交互返回结果。
MVT:
M全拼model 与mvc的m功能相同,负责和数据库交互,进行数据处理。
V全拼view 与mvc中的c功能相同,接收请求,进行业务处理,返回应答。
T全拼template 与mvc中的v功能相同,负责封装构造返回html。
安装步骤:
安装虚拟环境:
第一条命令:
sudo pip install virtualenv
第二条命令:
sudo pip install virtualenvwrapper
上述不能执行使用第二种方法:
第一条命令:
sudo python3 -m pip install virtualenv
第二条命令:
sudo python3 -m pip install virtualenvwrapper
如果下载速度慢:
可以在命令后面加豆瓣源:
添加一个豆瓣源: -i https://pypi.douban.com/simple
- 添加三句话(家目录下面的 .bashrc 如果你是用zsh 添加到.zshrc ) 要让我们的配置生效 soure .bashrc soure .zshrc
作用: 指定我们默认Python解释器的位置,指定我们virtualenvwrapper.sh的位置,python软件包和解释器安装的位置
如果看不懂详见:https://www.jianshu.com/p/6a34c1baee6a
用法:
创建虚拟环境:
mkvirtualenv + 虚拟环境名字 -p + python版本
p:后面加python版本可以不写
查看所有虚拟环境:
workon
切换虚拟环境:
workon + 要切换的虚拟环境名
删除虚拟环境:
rmvirtualenv + 要删除的虚拟环境名
退出虚拟环境:
deactivate
需要安装软件包Django:
pip install django==1.11
因为安装 django 1.11比较稳定
开始创建我们的第一个django项目:
创建项目:
django-admin startproject + 项目名称
项目结构:
python
manage.py #用于管理整个项目的核心模块
会有一个python包(包名和项目同名)
settings.py #项目的路由模块
urls.py #项目的路由模块
wsgi.py #django轻量级服务器
test.py #用于写单元测试的模块
创建应用:
1.需要先进入到那个目录下面
2.进入项目的目录下面输入命令
python manage.py startapp + 应用名
应用结构:
会有一个之前创建的应用包 包含:
models.py #模型 用于创建模型 跟数据库交互
view.py #接收请求,处理返回的结果模块
admin.py #后台管理站点
tests.py #测试模块
migrations(文件夹,python包)生成的迁移文件
__init__.py 第一次执行迁移这里会生成记录
手动注意点: 1. 使用pycharm打开 项目的时候需要吧应用安装到项目里面
INSTALL_APPS—-> booktest
2. 虚拟环境 我们切换成 我们需要的那个虚拟环境
3. template 文件夹(手动没有这个文件)手动创建一个这样的文件夹
需要去 settings.py 模块里面 把这个文件夹的地址 配置进来
templates 未来我们放html文件地方
用pycharm 也可以直接创建 项目和应用 并且相关的配置 它都给你做好了 上手即用
版本: pro 专业版
在配置文件里面,可以把我们的项目展示出来的内容由英文变成中文
LANGUAGE_CODE = 'zh-hans' # zh-Hans 繁体
TIME_ZONE = 'Asia/Shanghai'
ORM:
django里面有一个模块model.py 类对应数据库里面一张表,对象对应数据库里面的一横数据
例:
class Person(models.Model):
book = models.CharFiled(max_length=20)
Person 对应数据库里面的一张表
p = Person() 一条数据
案例:
from django.db import models
# django模块代表代表从django.db导入models模型
from datetime import datetime #导入时间模块
class BookInfo(models.Model):
bname = models.CharField(max_length=20)
bpub_date =models.CharField(default=datetime.now)
继承自models.Model去写我们自己的内容
CharField 代表 varchar类型
max_length 代表 最大长度
生成迁移文件:
python manage.py makemigrations
执行迁移文件:
python manage.py migrate
创建超级用户及站点管理:
后台管理 站点管理—>其实就是在管理你的数据库 通过界面而不是代码或者 sql语句
创建一个超级管理员
python manage.py createsuperuser
将你的项目 python manage.py runserver 跑起来
后台如果没有显示 各种模型 先去admin.py 文件里面 导入模型
将模型注册到后台页面
简单操作
python manage.py shell
- 导入对应的模型的模块
- 写代码 用django这个框架提供方式 来操数据库
# 往数据库里面写
1. 实例化一个对象 (模型-->表)
b = BookInfo()
2. 对象名.字段名 添加数据
b.bname = '射雕英雄传'
3. 保存操作的数据
b.save()
# 读
BookInfo.objects.all() # 列表,
模型类的名字.objects.all()是获取数据库里面所有的行——> 列表(里面装的是一个个对象)
模型类的名字.objects.get(id=1)是获取数据库里面的id=1的哪一条数据 —-> 对象
每一个对象 就是数据库里面的一行数据
小总结:
1. 模型类(model.py)
对应关系 类—-> 表 对象—-> 表里面一行
2. 你用Python写完一个类 不意味着数据库里面就有数据
1> 生成迁移文件
2> 执行迁移文件
3. 最最简单操作 通过 shell脚本来 临时
1. 添加
1> 导入模块(你要的模型类)
2> 添加 实例化一个对象 通过对象名.属性名 就可以添加一条数据 但是 在数据库里面 没有添加成功 因为 要 保存 对象名.save()
3. all get
模型类类名.objects.all()—>获取所有数据
模型类类名.objects.get(条件)—-> 满足条件的某一条数据
查询集表示从数据库中获取的对象集合,在管理器上调用某些过滤器方法会返回查询集,查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果,从Sql的角度,查询集和select语句等价,过滤器像where和limit子句。
返回查询集的过滤器如下:
all()返回所有数据
filter()返回满足条件的数据
exclude()返回满足条件之外的数据,相当于SQL语句中where部分的not关键字
order_by()对结果进行排序
返回单个值的过滤器如下:
get()代表返回返回单个满足条件
count()返回当前查询结果的总数
aggregate()聚合 返回一个字典
利用AJAX获取get请求实现异步请求返回结果案例演示:
首先我们在pycharm的templates文件里创建两个html的模板 名字可以随便起 在案例中我们把两个名字一个设为json1.html和json2.html
如图:
紧接着我们在views.py文件中设置两个python函数来为templates展示页面
如图:
导入JsonResponse 它是HttpResponse的子选项
第一个函数代表获取数据
第二个函数代表返回结果
然后我们去配置这两个函数的路由也就是urls.py文件:
如图:
我们进入urls.py首先要做的第一件事情是要在book应用下导入views的文件数据(因为本人建的是book应用,我们在应用下面的urls.py去设置路由)
在这里我们运用到了反向解析这样使得路由地址更清晰更安全更简洁
这时我们就要在templates的两个模板里面去运用ajax去写我们的模板并实现异步请求及结果
我们首先在json1.html文件上进行书写
首先我们要配置jQuery的CDN 由于我们要方便简洁就可以在这里找到地址 但是重要的是每一次项目都必须联网
找到版本进行复制到json1.html中
接下来我们开始在json1.html绘制内容:
我们首先要在body标签中去设置内容 这个配置流程就和我们平时写前端页面一样
button代表按钮 是我们即将用ajax获取结果的总指挥官
id为account和pwd代表利用ajax获取的账号密码结果之前的提示
那么我们去演示一下这个页面的概要信息
接着我们开始书写最重要的ajax的内容这时我会把每一个步骤的图片截下来翻译一遍请大家用心去看,其实学会了领略意思是非常简单的
首先我们要写一个script的标签在里面去写这个 那么我们看到这个会觉得有点乱
所以我们在每一次碰到$的时候后面都会加一对括号就像这样$() 然后在括号里
写上function(){}就像这样
这样就会形成
$(function(){
})
这段话的含义是接收上下文 据我感觉就是上文的cdn下文的body 这样才能接收
并使用
这时我们开始写button把总指挥给写出来
首先我们写$()在括号里写$('#action')代表我们在body写的按钮在这里去
相互连接 然后后面要写监听事件在鼠标点击的时候会反馈一个请求
$('#action').click() 紧接着在.click()的括号里写入function(){}这
代表回调函数把function里面的内容来给.click去支配 当我们点击 就会产
生这个请求$('#action').click(function(){
})
接下来我们要在回调函数的括号内用get请求获取view里的配置内容在json2.html来呈现结果
我们用反向解析的形式来配置json2的路径 此时大家会想 那json2在模板中写不写内容
其实不用因为我们早在view.py的文件中json2是JsonResponse来返回结果的的
当我们每一次点击按钮时会呈现json2的结果 由于我们没有在json2里设置内容所以显示的是空白
所以我们进行下一步操作
当我们获取get请求时 利用回调函数返回我们data也就是说我们在回调函数里面的数据 所以我们要把body里面的account和pwd利用.html函数去返回view里数据a的内容 和数据b的内容
这时我们去运行一下
所以我们在点击按钮的时候发出了一个get请求获取了view里的a数据和b数据
并用异步请求展现出来
cookie和session的区别:
cookie 目的是记录状态(会话保持) cookie代表 客户端 —> 向服务器发出请求 服务器响应请求(并设置浏览器的cookie值) 例: name = ‘zhangsan’ 当客户端又一次 发出请求时并带上 name=’zhangsan’ 发送到服务器 那么我们服务器 接收请求后就知道服务器里面的内容 是name=’zhangsan’
cookie的缺点 cookie的键和值都存在浏览器的客户端里面 意味着安全性不高 本地可以有办法随意篡改
session 代表 客户端 向服务器发起请求 这时候服务器会有一张表 表里有两个字段 一个是 session的id 一个是session的值 然后在浏览器本地存了 一个cookie 这个cookie的键 是session id的值 当客户端又一次发起请求时 就带上这个上这个 session id
django登录实战
我们首先在pycharm创建新的一个项目和应用 项目名叫login_login 应用名叫login_user请看下图:
然后就create创建项目和应用
在mysql里面创建一个数据库为了保存您的账号密码等数据如下图:
创建了一个名叫loginA的数据库
然后我们进行settings的相关配置:
我们开始在models.py创建表的模型:
在这个模型中我们要设计 用户名,密码,邮箱地址,性别,创建时间
#设计一个User的模型类
class User(models.Model):
#设计一个元祖来给性别传值
gender = (
('boy', '男孩'),
('gril', '女孩')
)
#设计用户名 最大长度为128 站点管理显示用户名字段 字段unique唯一不得重复
name = models.CharField(max_length=128, verbose_name='用户名', unique=True)
#设计密码 最大长度为256 因为可能会关系到加密问题所以在数据库里把字符调的长了一些
password = models.CharField(max_length=256, verbose_name='密码')
#设计邮箱 使用专门的EmailField类型
email = models.EmailField(verbose_name='邮箱')
#设计性别 把之前的gender利用choices来接收 设置字符长度10 默认为男
sex = models.CharField(max_length=10, choices=gender, default='男', verbose_name='性别')
#设计创建时间 使用专门的DateTimeField字段去设置
t_time = models.DateTimeField(auto_now_add=True, verbose_name='时间')
#人性化设计用户名 方便在站点管理显示
def __str__(self):
return self.name
#设计Meta元信息 名字为用户表 复数形式也等于用户表
class Meta:
verbose_name = '用户表'
verbose_name_plural = verbose_name
在项目包下的 init文件中设置 与pymysql的链接配置如下图:
随后我们在下方Terminal终端中输入命令 第一条命令代表 生成迁移 代表 把刚刚models.py设计的模型表 和一系列配置进行当前的生成 但是 这个是生成不带表 已经执行
紧接着我们进行执行迁移
全是OK代表就是成功的
然后开始创建站点管理的超级用户
我们在应用下的admin.py中注册我们的模型表
首先导入应用下的models模型下的User应用
from .models import User
然后注册User模型
admin.site.register(User)
我们用命令开始登录服务器
用服务器地址登录admin
为了能让用户看到我们展示的页面 所以我们在templates文件中创建 4个html文件 这时我们选中templates右键 new 找到html 点击 会出现小框 一个一个就这样创建
这四个文件 base.html代表父模板 剩下的三个网页都要继承base.html 其中 这三个文件 index.html代表首页 login.html代表登录页 register.html代表注册页
然后开始设置应用下的views.py
#首先导入模型下的User表
from .models import User
#导入重定向
from django.shortcuts import redirect
#创建index首页函数 return返回首页前端模板
def index(request):
return render(request, 'index.html')
#创建login登录函数 return返回登录页前端模板
def login(request):
return render(request, 'login.html')