一、 MySQL数据库、前端
我们之前学习了数据库、前端、Python基础等三大部分,但是,他们三块的内容没有串在一起,也就没办法开发出一个完成的web项目出来,因此,我们通过Django框架把这三者融合在一起,以后我们就可以很方便的开发出各种各样的项目.
二、web应用的简介
"""是因为Django框架是一个专门用来开发web项目的框架"""
1. Web应用程序是什么Web应用程序是一种可以通过Web访问的应用程序,也就是说只需要一个浏览器即可,不需要其他软件了
2. 应用程序有两种模式C/ S、B/ S。Django就是开发的B/ S应用程序,所以,我们就认为浏览器就是我们的客户端、Django框架就是服务端
3. Web应用程序的优点1. 只需要一个浏览器即可,不再需要安装其他应用软件2. 节省用户的空间资源3. 它们不需要更新,是因为服务端只要一更新版本,会直接影响客户端的更新4. 跨平台使用
4. Web应用程序的缺点"""一旦web应用的服务端宕机,直接影响客户端的正常访问!!!""" 什么是web框架:框架的意思就是别人提前写好的,我们只需要按照人家的要求在固定的位置写固定的代码
三、手撸web框架(推导框架的演变、代码无需掌握、重点看思路)
web应用程序主要就是B/ S架构的,浏览器就是客户端、我们现在开发出一个服务端出来即可
你们就可以认为框架就是客户端的服务端
"""通过socket写出一个服务端出来""" HTTP协议的相关知识
1. 四大特性基于请求和响应基于TCP协议之上的应用层协议无状态短连接
2. 请求数据格式请求首行( 请求方式、协议版本号) 请求头\r\n请求体
3. 响应数据格式响应首行( 响应状态码) 响应头\r\n响应体
4. 响应状态码1xx2xx3xx4xx5xx如何做到在浏览器地址栏中写什么后缀就返回什么内容?思路:1. 在后端肯定是要知道你在浏览器输入了什么后缀2. 判断是什么后缀就返回什么内容conn. send( b'' )
浏览器每次朝后端发起请求的时候,都会多一次:/ favicon. ico
< link rel= "shortcut icon" href= "https://csdnimg.cn/public/favicon.ico" > 存在的问题:
1. socket部分我们每次都要书写( 要写重复代码)
2. 我们需要自己来处理HTTP格式的数据,自己做切分,自己来取值等比较麻烦
3. 并发问题没有解决如何去优化以上问题
四、 借助于wsgiref模块(内置模块,直接使用)
from wsgiref. simple_server import make_server解决了socket部分不用我们写了,在wsgiref模块里人家帮我们写了
它解决了并发问题 WSGIServer类- - - - - - > wsgiref- - - - - - > 它能够解决的并发量不高- - - - - > 本地使用wsgiref服务器- - - - - - - - - - - - - - - > 代码上线之后,就不是有它- - - - - - - - - - - > uwsgi服务器( 它支持的并发量更高) 它帮我们解决了什么问题:
1. socket部分就不用写了,帮我们封装到了底层里面
2. 帮助我们处理了纯原生的HTTP格式的数据,把这些数据都封装到了大字典里了env
3. 它能够解决一定的并发问题,只不过是处理的并发不是特别高def run ( env, response) : """:param env: 客户端每次发起请求的时候,所携带的数据都在这个里面,就类似属于是request:param response: 是后端给浏览器返回的数据:return: 返回给浏览器查看的""" print ( env) response( "200 OK" , [ ] ) current_path = env. get( 'PATH_INFO' ) if current_path == '/index' : return [ b'index' ] elif current_path == '/login' : return [ b'login' ] else : return [ b'404 error' ] if __name__ == '__main__' : server = make_server( host= '127.0.0.1' , port= 8000 , app= run) """这句话写完就会实时监听127.0.0.1:8000这个地址只要有客户端来访问这个地址,那么,我服务端就能够接收到客户端的请求, 就类似于是我们的socket端app=run:只要有客户度发过去请求,那么就会把处理的请求交给run这个函数来处理,run是个函数名(在django中用的就是函数名)后面你要学的flask框架这个地方写的是对象,而不是函数名obj()-------------->会触发类的__call__方法--------->flask框架的启动代码就在__call__里面写着的,是入口""" 启动服务端server. serve_forever( ) """
views.py----------------->视图文件--------->主要就是写后端的逻辑的
urls.py------------------>路由文件(后缀)---------->路由与视图函数的对应关系
templates---------------->专门用来存储html文件的
""" 以后我们要想增加一个后缀,只需要在urls. py中写一个路由和在views. py中写一个视图函数即可.
五、Django框架的学习
Django是Python中使用最多的一个主流框架!python中的主流框架:Django: 主要用来开发web项目的,它比较笨重,一般小型项目不怎么使用它,大而全flask:它是一个比较轻量级的框架,它主要依赖于第三方的模块,不断的安装第三方模块,小而精tornado: 异步非阻塞,解决高并发比较擅长这个框架学起来有点难度. . . . 版本问题:
1 . X( 老项目) 2 . X( 新项目) 3 . X( 新版本)
1 . x和2 . x本质上差别不是很大,但是也有区别,我们讲1 . x,附带讲2 . x的区别
在drf中,都要使用2 . x以上版本,drf这个框架要求django的版本必须是2 . x以上注意事项:
1. 你的项目名称和应用名称以及其他文件的名称都要使用英文的,坚决不能够使用中文的
2. 你的计算机名称最好都使用英文的
3. 一个pycharm窗口只打开一个django项目,不能够一个窗口打开很多个django项目如何使用Django
1. 安装django
pip install django== 1.11
django版本要和解释器的版本要匹配:
django2. X版本- - - - - - - - - - - - > 解释器的版本最后3.6 以上如何验证django是否安装成功
在cmd中输入:django- admin- - - - - - > 如果有输出内容就说明安装成功2. 创建项目1 命令行创建"""你可以先切换路径,切换到你想把django项目放到的路径里""" django- admin startproject 项目名django- admin startproject myfirst_dj2 pycharm创建FileNew Projectdjango. . .
3. 如何启动项目1. 命令行启动先把路径切到manage. py所在的路径python3 manage. py runserver """项目启动起来之后,会监听:http://127.0.0.1:8000/""" 默认端口号是:8000 如何修改端口号:python3 manage. py runserver 127.0 .0 .1 8001 2. pycharm启动点击绿色按钮访问项目: http: // 127.0 .0 .1 : 8000 / 4. Next, start your first app by running python manage. py startapp [ app_label] .
"""创建应用""" 如何创建应用1. 命令行创建python manage. py startapp [ app_label] . python manage. py startapp app01. 2. pycharm创建当你把应用创建出来之后,紧接着要做的一件事情就是:注册应用
在配置文件中注册应用,这个应用才生效
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
INSTALLED_APPS = [ 'django.contrib.admin' , 'django.contrib.auth' , 'django.contrib.contenttypes' , 'django.contrib.sessions' , 'django.contrib.messages' , 'django.contrib.staticfiles' , 'app01.apps.App01Config' , 'app01' ,
]
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 以后我们在哪里写代码呢?
六、主要文件介绍
myfirst_dj app01 migrations __init__. pyadmin. py apps. py models. py tests. py views. py
myfirst_dj__init__. pysettings. py urls. py wsgi. py db. sqlite3
manage. py
七、应用
django主要开发的就是一款web应用!
Django框架类似于是一所大学( 空壳子) 应用就是大学里面的二级学院( 具备独立的功能模块)
一个应用就是一个独立的功能模块
比如:userorderaddresscart. . .
应用名一定要见名知意,但是我们教学为了方便,我都使用app01、02 、03. . .
八、小白必会三板斧
The view app01. views. index didn't return an HttpResponse object . It returned None instead.
return HttpResponse( "OK" )
return render( request, 'index.html' )
return redirect( 'http://www.baidu.com' )
TEMPLATES = [ { 'BACKEND' : 'django.template.backends.django.DjangoTemplates' , 'DIRS' : [ os. path. join( BASE_DIR, 'templates' ) ] , 'DIRS' : [ os. path. join( BASE_DIR, 'templates' ) ] , 'APP_DIRS' : True , 'OPTIONS' : { 'context_processors' : [ 'django.template.context_processors.debug' , 'django.template.context_processors.request' , 'django.contrib.auth.context_processors.auth' , 'django.contrib.messages.context_processors.messages' , ] , } , } ,
]