Django
Web应用
# python就业方向
1. web方向 >>>> 通过浏览器访问的应用程序 >>>> 做网页
2. 爬虫岗位 >>>> 爬取数据
3. 数据分析 >>>> 工作岗位不够多
4. AI >>>> 没有工作经验的不要去 >>>> 需要数学
# 机遇与挑战并行
web:
"""
通过浏览器访问的应用程序
c/s架构
b/s架构 >>>> 浏览器--->服务端
web与应用程序的优点:
1. 只需要有一个浏览器就行
2. 节省内存空间
3. 不需要更新
web应用程序的缺点:
特别依赖服务端程序的健壮性,一但服务端宕机,客户端就用不了了
web框架:
框架就是别人写好的模板,直接在模板上的固定位置写东西
Django框架是一款专门用来写web的框架
"""
b/s架构
# 浏览器 ---> 服务端
# 通过socket写服务端
手写web框架
import socket
server = socket.socket()
server.bind(('127.0.0.1', 9000))
server.listen(3)
while True:
conn, addr = server.accept() # 接受客户端发来的信息,每个服务端都遵循http
data = conn.recv(1024)
data = data.decode('utf-8')
current_path = data.split()[1]
conn.send(b'HTTP/1.1 200 \r\n\r\n') # http的流式协议,必须要有
if current_path == '/index':
conn.send(b'index')
elif current_path == '/login':
conn.send(b'login')
else:
conn.send(b'404')
conn.close()
借助于wsgiref模块
# 1. socekt不需要自己写了
# 2. HTTP的数据也不许自己处理了
"""
urls.py =====================>后缀与视图函数的对应关系---------->路由文件
views.py=======================>视图函数,以后专门用来写逻辑功能的
templates文件夹===================>专门用来存储html文件
"""
# 以后你要是想增加新功能,只需要在urls.py中写路由,然后在视图函数中写功能即可
动静态网页
1. 静态网页
# 只有页面,数据是写死的,比如html文件
2. 动态网页
# 页面中得数据是从数据库中查询出来的
python中三大主流框架
1. Django
# 特点:大,全。重量级的框架。自带很多功能和模块,也带了很多的文件
2. flask
# 特点:小,精。轻量级的框架。自身没啥文件,一样可以做Django能做的事。严重依赖第三方模块想实现更多的功能就要不停的安装模块。模块装的足够多,就和Django差不多了
3. tornado
# 特点:异步非阻塞,支持高并发
# 目前学习Django框架,后面学习flask框架,框架很多不必全学,框架基本都差不多,再学起来比较容易
Django框架
1. 版本
1.x 2.x 3.x(不学)
# 我们以1.x为主,附带2.x的区别,1.x和2.x大部分是相同的,在drf中得学习,必须用2.x
2. 安装Django
pip install django===1.11
# 以后我们自己装的第三方模块都在:site-packages文件夹下面
3. 如何验证django是否安装成功
# 在cmd中,输入django-admin,看一些是否有反应,如果有反应就说明安装成功了.
如何使用
1. 创建项目
# 1. 命令行创建
'''你可以提前切换文件夹路径,用来存储django框架的文件位置'''
django-admin startproject 项目名
django-admin startproject myfirst
# 2. pycharm创建
2. 启动django项目
# 1. cmd启动
先切换路径到manage.py这一层下面
python3 manage.py runserver # 默认启动在本地电脑上
# 2. pycharm启动
在上边导航栏中点击绿色按钮启动
"""Next, start your first app by running python manage.py startapp [app_label]."""
3. 创建应用
"""
Django框架就是一款专门用来开发web应用的
django这个框架类类似于是一所大学(空壳)
应用相当于是一所大学里面的二级学院
所以,应用是可以有多个的
eg:我们使用django开发一个淘宝出来
用户相关的功能----------->user
订单相关的功能------------>order
客服相关的功能------------>kefu
发货相关的功能------------>fahuo
...
每一个应用就是一个独立的功能
"""
# 每一个django项目至少要有一个应用!!!
4. 如何创建应用
# 1. cmd创建
********************************************************************
python3 manage.py startapp 应用名
python3 manage.py startapp app01
********************************************************************
'''
应用名都应该做到见名知意:
user
order
course
...
为了方便教学,我们统一使用app01/02/03/04...
'''
# 2. pycharm创建应用
新建项目的时候,一块创建应用
# 2.1
Tools
run manage.py task
# 在这个里面命令前面的python3 manage.py省略不写
5. 当应用创建出来之后,第一件事先去做:
# 去配置文件setting.py中去注册应用,以后每创建出来一个应用,都要去这里面去注册,如果不注册,你创建出来的应用,不生效.
********************************************************************************
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 'app01.apps.App01Config', # 注册应用,全称
'app01',
]
************************************************************************************
注意事项
1. 一个pycharm窗口只打开一个django项目
2. 以后再django项目所有的文件名都不能出现中文.
命令行创建和pycharm创建的区别
1. 命令行创建的项目没有templates文件夹
# 我们自己手动创建一个文件夹
2. 配置文件中:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], # 默认没有东西
},
]
2. pycharm创建的项目会自动创建templates文件夹
配置文件中:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')] # pycharm创建出来的有东西
}
# 在配置文件中统一改成:
'DIRS': [os.path.join(BASE_DIR, 'templates')]
主要文件介绍
myfirst # 项目名称
app01 # 应用名称
migrations # 它是数据库迁移记录----------->跟数据库相关的时候才会用到
__init__.py
admin.py # 跟后台相关的
apps.py # 跟注册一些东西相关的
models.py # 这个是跟数据库相关的文件(重要)
tests.py # 这个是测试文件
views.py # 视图函数----------->主要写一些功能逻辑
app02
myfirst
__init__.py
settings.py # django框架的配置文件
urls.py # 路由文件:后缀和视图函数的对应关系
wsgi.py # 是一个服务器------->wsgiref(支持的并发量小)----------->uwsgi服务器----->支持的并发量高
db.sqlite3 # django自带的数据库,方便我们测试使用
manage.py # 这个是django框架的启动文件,入口文件
django三板斧
from django.shortcuts import render, HttpResponse, redirect
1. HttpResponse
2. render
3. redirect
def func(request):
print('from func')
# return HttpResponse("ok!!!") # 里面写的都是字符串
# return render(request,'index.html') # 加载html文件
# return redirect('http://www.baidu.com') # 重定向
return redirect('/home/') # 重定向