目录
每次看到这里都要回顾几个知识点:
- 网络协议
- http协议(四大特性)
- 数据格式
- 响应状态码
一、借助wsgiref模块实现简易版web框架
'''
urls.py 路由与视图函数的对应关系
views.py 视图函数(后端的业务逻辑)
manage.py 启动文件
templates文件夹 专门用来存放html
'''
二、动静态页面
- 静态页面
- 页面上的数据是直接写死的,不会变化
- 动态页面
- 页面上的数据是实时获取的
# 动态网页制作1
# 主要方法是获取后端页面代码(字符串),替换字符串中的某些数据为我们后端写的代码,比如下面的时间
import datetime
def get_time(env):
current_time = datetime.datetime.now().strftime('%Y-%m-%d %X')
# 如何将后端获取到的数据"传递"给html文件?
with open(r'templates/03 mytime.html','r',encoding='utf-8') as f:
data = f.read()
# data就是一堆字符串
data = data.replace('dwadasdsadsadasdas',current_time) # 在后端将html页面处理好之后再返回给前端
return data
# 动态页面制作2
# 将一个字典传递给html文件 并且可以在文件上方便快捷的操作字典数据
from jinja2 import Template
def get_dict(env):
user_dic = {'username':'jason','age':18,'hobby':'read'}
with open(r'templates/04 get_dict.html','r',encoding='utf-8') as f:
data = f.read()
tmp = Template(data)
res = tmp.render(user=user_dic)
# 给get_dict.html传递了一个值 页面上通过变量名user就能够拿到user_dict
return res
# 后端获取数据库中数据展示到前端页面
<body>
# 模版语言
# 可以简单的取值
{{ user }}
{{ user.get('username')}}
{{ user.age }}
{{ user['hobby'] }}
# 也可以for循环创建table
{% for user_dict in user_list %}
<tr>
<td>{{ user_dict.id}}</td>
<td>{{ user_dict.username}}</td>
<td>{{ user_dict.password}}</td>
<td>{{ user_dict.hobby}}</td>
</tr>
{% endfor%}
</body>
三、python三大主流web框架
A:socket部分
B:路由与视图函数的对应关系(路由匹配)
C:模版语法
- django
- 特点:大而全,自带的功能多
- 缺点:笨重
- A是用别人的:wsgiref模块,B是用自己的,C是用自己的
- flask
- 特点:小而精,自带的功能少,但是第三方的库多
- 缺点:比较依赖第三方开发者
- A是用别人的:werkzeug(内部还是wsgiref模块),B是自己写的,C是用别人的(jinja2)
- tornado
- 特点:异步非阻塞,支持高并发,可以作为游戏服务器开发
- 缺点:None
- ABC都是自己写的
四、启动一个django项目
1 启动前的注意事项
1.1 计算机的问题
- 计算机名称不能有中文
- 一个pycharm窗口只能开一个项目
- 项目里面的所有文件也尽量不能出现中文
- python解释器尽量使用3.4-3.6之间的版本,如果用高版本的python可能会报错,点击最后一个报错信息,删除一个逗号即可。
1.2 django版本的问题
1.X,2.X用的比较多3.X由于是最近发行的先不考虑
目前学习的版本是1.11.11
1.3 django安装
命令行输入:pip3 install django==1.11.11
或者在settings里面安装,注意要切换python解释器
检验是否安装成功,在命令行输入:django-admin
2 django的基本操作(终端版)
2.1 创建django项目
到指定盘符cmd输入:django-admin startproject mysite
此时会发现创建了一个文件夹
- mysite
- manage.py
- mysite
- '_init _.py'
- settings.py
- urls.py
- wsgi.py
2.2 启动django项目
cmd切换到mysite下,输入:python manage.py runserver
2.3 创建应用
cmd到mysite下,输入:python manage.py startapp app01(app的名称应该见名知意)
3 django基本操作(pycharm版)
创建项目:点击新建项目即可(注意python版本)
启动:pycharm命令行,或者启动manage.py
创建app:pycharm命令行,或者点击tools,点击run manage.py task... 提示创建
修改端口号:点击edit confi
4 应用(app)
django是一款专门开发app的web框架,这里的app不是手机的app,而是功能的意思。一个app代表一类功能,一个django框架就是一群app的集合体。
注意:每次创建完app后都要到settings里去注册app
# 找到项目下的settins.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', # 简写
]
5 主要文件介绍
mysite(项目文件夹)
- mysite(文件夹)
- settings.py 配置文件
- urls.py 路由与视图函数的对应关系(路由层)
- wsgi.py wsgiref模块(不考虑)
- manage.py 启动文件
- db.sqlite3 自带的小型数据库,功能不是很完善还有bug
- app01 (文件夹)
- admin.py django后台管理
- apps.py 注册使用
- migrations 数据迁移记录
- models.py 数据库相关的模型类(orm)
- tests.py 测试文件
- views.py 视图函数
6 命令行创建和pycharm创建的区别
# 1 命令行创建不会自动有templatew文件夹 需要你自己手动创建而pycharm会自动帮你创建并且还会自动在配置文件中配置对应的路径
# pycharm创建
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
]
# 命令行创建
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
]
"""
也就意味着你在用命令创建django项目的时候不单单需要创建templates文件夹还需要去配置文件中配置路径
'DIRS': [os.path.join(BASE_DIR, 'templates')]
"""
7 django小白必会三板斧
- HttpResponse
- 返回字符串类型的数据
- render
- 返回html文件
- redirect
- 重定向
- 指定页面:return redirect('https://www.mzitu.com/')
- 拼接当前页面:return redirect('/home/')