Django框架
基于 Python 语言的 Web 框架有很多,Django 框架是其中应用范围最广、性能最优异、最具发展前景的一款。
当今,许多非常成功的 Web 网站和移动 App 都是基于 Django 框架开发的,如 Instagram、豆瓣等。
Django封装了好多方法,直接调用,比如socket方法。连接MySQL方法等,单独放到文件中,大大简化了开发
MVC与MTV模型
MVC
MVC就是把Web应用分为模型(M),控制器©和视图(V)三层,他们之间以一种插件式的(随调随用)、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求。
1、MTV
Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:
M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
T 代表模板 (Template):负责如何把页面展示给用户(html)。
V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template。
我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,
基于请求做出响应,客户都先请求,服务端做出对应的响应,按照http协议的请求协议发送请求,
服务端按照http协议的响应协议来响应请求,这样的网络通信,我们就可以自己实现Web框架了。
2、Django下载
官网:https://www.djangoproject.com/download/
版本历史,LTS表示长期支持版本
linux 安装Django
pip3 install Django==4.2.1
Linux安装好后,django-admin不在环境变量,需要自己设置,不然命令无法使用
windows通过pycharm安装Django,勾选指定版本
3、创建Django项目
Django就是一个模块,通过模块提供的相关指令,来创建项目
可以通过指令来创建
django-admin startproject jingtian(项目名称)
通过指令生成项目,项目下的目录以及个文件都是自动生成的
也可以通过pycharm来生成Django项目
在pycharm中新建Django工程,file–>new project–>Django,填写相应的工程名字如下所示:
项目文件介绍
项目创建好之后,就可以运行起来了,运行命令与wsgiref一样
并打印出来,怎么访问
浏览器访问
你会发现,上面没有什么view视图函数的文件啊,这里我们说一个应用与项目的关系,上面我们只是创建了一个项目,
并没有创建应用,以微信来举例,微信是不是一个大的项目,但是微信里面是不是有很多个应用,
支付应用、聊天应用、朋友圈、小程序等这些在一定程度上都是相互独立的应用,
也就是说一个大的项目里面可以有多个应用,也就是说项目是包含应用的,
它没有将view放到这个项目目录里面是因为它觉得,一个项目里面可以有多个应用,
而每个应用都有自己这个应用的逻辑内容,所以他觉得这个view应该放到应用里面,
比如说我们的微信,刚才说了几个应用,这几个应用的逻辑能放到一起吗,放到一起是不是就乱套啦,
也不好管理和维护,所以这些应用的逻辑都分开来放,它就帮我们提炼出来了,提炼出来一个叫做应用的东西,所以我们需要来创建这个应用。
在项目里面创建应用
python manage.py startapp blog #通过执行manage.py文件来创建应用,执行这句话一定要注意,你应该在这个manage.py的文件所在目录下执行这句话,因为其他目录里面没有这个文件
python manage.py startapp blog2 #每个应用都有自己的目录,每个应用的目录下都有自己的views.py视图函数和models.py数据库操作相关的文件python manage.py startapp blog
在manager.py同级目录下创建了个应用 blog,里面有models.py和views.py。都是自动生成的
现在应用创建了,但该应用并不从属于firstDjango项目,要想该应用从属于项目,必须在项目的配置文件settings.py里面配置
找到INSTALL_APPS
把自己创建的应用名称放到该列表中,这样你创建的应用才从属于该项目
这个应用,里面的函数,才能调用settings里面的相关配置
4、通过pycharm来创建项目
其实我们将来创建django项目,很少用命令行了,就用pycharm来创建
File----New Project
在Applaction name 设置应用名,要选已存在的解释器,不要用pycharm自带的虚拟环境,否则每次创建都要重新配置环境。
其他不用变,点击create,创建项目
选在新窗口打开
新项目,新应用创建成功
而且在settings.py里面已经将应用加入到项目,点分隔路径,找的是Myapp文件夹下面的apps.py文件里面的MyappConfig类
里面返回了应用名称,相当于我们手动在settings.py那里直接写应用名称,是一样的
pycharm还会创建个templates文件件,用于存放html文件。手动指令创建的不带templates文件夹
后续我们都通过pycharm创建项目
5、视图的基本写法
from django.http import HttpResponse
def index(request):
return HttpResponse(“hello django2!!!”)
视图读取参数
url以查询字符串的方式传参,使用request.GET.get(“name”, default)的形式获取参数值
url以路径传参,使用路径转换器来进行获取参数,在django1.0版本的时候只能通过正则表达式来获取参数。
request对象的方法
request.GET:获取url中的查询字符串的数据
request.POST: 获取表单提交的数据,为字典类型
request.path:获取请求的路径
request.method:获取请求的方法get or post
request.COOKIES:获取请求过来的cookies
request.user:获取请求的用户对象,可以通过它判断用户是否登录,并获取用户信息
request.session:一个既可读又可写的类似字典的对象,表示当前会话
request.META:一个标准的Python字典,包含所有的HTTP首部。具体的头部信息取决于客户端和服务器
视图函数的常用的返回对象
HttpResponse对象,可以直接返回一些字符串
render: 将数据在模板中渲染并显示,使用方式为return render(request, template_path, {k:v})字典中key与value就是要向前端渲染出的数据。
JsonResponse返回一个json类型,通常用于与前端进行ajax交互
6、静态文件的配置
在项目根目录创建“static" 与 ”templates“ 文件夹同级
在配置文件settings中添加STATICFILES_DIRS = (os.path.join(BASE_DIR, “static”),)注意这是一个元组
静态文件的种类有:css文件,js文件,图片
django自带的模板过滤器以及如何自定义模板过滤器
自定义模板过滤器的方法:
1、在项目的应用下创建templatetags包
2、将app.templatetags写入settings中的InstallApp中注册
3、在文件夹下创建myfilter.py文件
4、在myfilter.py文件中定义如下内容
7、基于Django实现一个简单的示例
首先,先定义访问路径,在项目的urls.py里面配置,将我们创建的应用的views模块导入
1、第一个是系统自带的,下面那个是我们自己配置的,注意:views.home 这个home 必须是在应用的视图函数的函数名
2、然后配置响应页面,在templates文件夹下创建html文件,文件名没要求
3、在应用的views.py里面创建视图函数,函数名必须与在urls.py里面写的函数名
from django.shortcuts import render #Create your views here. #定义视图函数一定要带个参数,命名不一定叫request #Django将environ字典加工成了wsgirequest类的对象 #Django创建了一个类,实例化一个对象传给了我们定义的视图函数 #class Wsgirequest(): # def __init__(self): # self.path = environ["PATH_INFO"] # self.path = environ["PATH_INFO"] # self.path = environ["PATH_INFO"] # self.path = environ["PATH_INFO"] def home(request): #打印请求路径 print(request.path) #之前我们响应浏览器页面,需要自己打开文件,如下,现在通过Django,不用我们自己操作了 # with open("../templates/index.html","rb") as f1: # data = f1.read() #Django可以帮我们打开文件,第一个参数必须是request,第二个参数是文件,第三个是需要替换的页面内容,以字典的形式传参 return render(request,'index.html')
通过render将获取的数据返回到页面显示
4、这里我们写的文件名,Django怎么能找到呢,我们需要再settings.py的TEMPLATES里面配置
默认是这样配置的
将我们的页面文件路径加进去,指给Django程序说,以后找html文件,就去templates目录下找
注意,4.2版本路径必须放到列表中,不然访问报错
错误配置案例如下,
报错,找不到文件,那是因为templates路径没找到
正确配置如下,将路径放入列表中
也可以直接这样写路径,不用拼接,直接将自己的路径名添加到BASE_DIR后面,放到列表中。更简洁
浏览器访问,按照自己配置的路径访问,大功告成
如果不添加路径,会报错,提示你那些路径可以访问