今日内容详细
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. 响应状态码
1xx
2xx
3xx
4xx
5xx
# 如何做到在浏览器地址栏中写什么后缀就返回什么内容?
思路:
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服务器(它支持的并发量更高)
# 代码上线之后会使用 Nginx + uwsgi------------------>后续再将.
def run(env, response):
"""
:param env: 客户端每次发起请求的时候,所携带的数据都在这个里面,就类似属于是request
:param response: 是后端给浏览器返回的数据
:return: 返回给浏览器查看的
"""
print(env) # 把HTTP格式的数据都封装到了大字典里去了
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 startpeoject 项目名
django-admin startproject myfirst_dj
# 2 pycharm创建
File
New Project
django
...
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__.py
admin.py # 跟后台项目注册等相关的
apps.py # 跟一些注册相关
models.py # 跟数据库打交道的 模型层----->MTV模型
tests.py # 测试文件
views.py # 视图文件,写一些后端逻辑
myfirst_dj
__init__.py
settings.py # 配置文件相关的
urls.py # 路由相关的
wsgi.py # 内部封装的wsgiref服务器,uwsgi服务器之后,这个文件就没用了uwsgi.py
db.sqlite3 # Django自带的小型数据库
manage.py # Django框架的入口文件
应用
# django主要开发的就是一款web应用!
Django框架类似于是一所大学(空壳子)
应用就是大学里面的二级学院(具备独立的功能模块)
# 一个应用就是一个独立的功能模块
比如:
user
order
address
cart
...
# 应用名一定要见名知意,但是我们教学为了方便,我都使用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') # 返回html文件的
return redirect('http://www.baidu.com') # 重定向
###############################自己创建的templates文件夹,要在配置文件注册################
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',
],
},
},
]
###############################自己创建的templates文件夹,要在配置文件注册################
标签:__,web,框架,三板斧,py,django,必会,Django
From: https://www.cnblogs.com/huangchunfang/p/17583575.html