python的django框架架构_Django框架(一)

一、学习Django之前需知道

前端后端数据库

# 后端学不好 工作不好找

软件开发架构

cs架构

bs架构

# 本质bs也是cs

纯手撸web框架【web框架本质】

# HTTP协议

"""

网络协议

HTTP协议数据传输是明文

HTTPS协议数据传输是密文

websocket协议数据传输是密文

四大特性

1.基于请求响应

2.基于TCP、IP作用于应用层之上的协议

3.无状态

4.短/无链接

数据格式

请求首行

请求头

请求体

响应状态码

1XX

2XX200

3XX

4XX403 404

5XX500

"""

# 如何做到后缀的不同返回不同的内容

# 拿到用户输入的后缀 做判断

# 不足之处

1.代码重复(服务端代码所有人都要重复写)

2.手动处理http格式的数据 并且只能拿到url后缀 其他数据获取繁琐(数据格式一样处理的代码其实也大致一样 重复写)

3.并发的问题

借助于wsgiref模块

"""

urls.py路由与视图函数对应关系

views.py视图函数(后端业务逻辑)

templates文件夹专门用来存储html文件

"""

# 按照功能的不同拆分之后 后续添加功能只需要在urls.py书写对应关系然后取views.py书写业务逻辑即可

动静态网页

"""

静态网页

页面上的数据是直接写死的 万年不变

动态网页

数据是实时获取的

eg:

1.后端获取当前时间展示到html页面上

2.数据是从数据库中获取的展示到html页面上

"""

# 动态网页制作

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

# 将一个字典传递给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

# 后端获取数据库中数据展示到前端页面

模版语法之Jinja2模块

pip3 install jinja2

"""模版语法是在后端起作用的"""

# 模版语法(非常贴近python语法)

{{ user }}

{{ user.get('username')}}

{{ user.age }}

{{ user['hobby'] }}

{% for user_dict in user_list %}

{{ user_dict.id}}

{{ user_dict.username}}

{{ user_dict.password}}

{{ user_dict.hobby}}

{% endfor%}

自定义简易版本web框架请求流程图

"""

wsgiref模块

1.请求来的时候解析http格式的数据 封装成大字典

2.响应走的时候给数据打包成符合http格式 再返回给浏览器

"""

1966828-20200525192157578-1066682757.png

python三大主流web框架

"""

django

特点:大而全 自带的功能特别特别特别的多 类似于航空母舰

不足之处:

有时候过于笨重

flask

特点:小而精 自带的功能特别特别特别的少 类似于游骑兵

第三方的模块特别特别特别的多,如果将flask第三方的模块加起来完全可以盖过django

并且也越来越像django

不足之处:

比较依赖于第三方的开发者

tornado

特点:异步非阻塞 支持高并发

牛逼到甚至可以开发游戏服务器

不足之处:

暂时你不会

"""

A:socket部分

B:路由与视图函数对应关系(路由匹配)

C:模版语法

django

A用的是别人的wsgiref模块

B用的是自己的

C用的是自己的(没有jinja2好用 但是也很方便)

flask

A用的是别人的werkzeug(内部还是wsgiref模块)

B自己写的

C用的别人的(jinja2)

tornado

A,B,C都是自己写的

注意事项及安装

# 如何让你的计算机能够正常的启动django项目

1.计算机的名称不能有中文

2.一个pycharm窗口只开一个项目

3.项目里面所有的文件也尽量不要出现中文

4.python解释器尽量使用3.4~3.6之间的版本

(如果你的项目报错 你点击最后一个报错信息

去源码中把逗号删掉)

# django版本问题

1.X 2.X 3.X(直接忽略)

1.X和2.X本身差距也不大 我们讲解主要以1.X为例 会讲解2.X区别

公司之前用的1.8 满满过渡到了1.11版本 有一些项目用的2.0

# django安装

pip3 install django==1.11.11

如果已经安装了其他版本 无需自己卸载

直接重新装 会自动卸载安装新的

如果报错 看看是不是timeout 如果是 那么只是网速波动

重新安装即可

验证是否安装成功的方式1

终端输入django-admin看看有没有反应

二、 django基本操作

# 命令行操作

# 1.创建django项目

"""

你可以先切换到对应的D盘 然后再创建

"""

django-admin startproject mysite

mysite文件夹

manage.py

mysite文件夹

__init__.py

settings.py

urls.py

wsgi.py

# 2.启动django项目

"""

一定要先切换到项目目录下

cd /mysite

"""

python3 manage.py runserver

# http://127.0.0.1:8000/

# 3.创建应用

"""

Next, start your first app by running python manage.py startapp [app_label].

"""

python manage.py startapp app01

应用名应该做到见名知意

user

order

web

...

但是我们教学统一就用app01/02/03/04

有很多文件

# pycharm操作

# 1 new project 选择左侧第二个django即可

# 2 启动

1.还是用命令行启动

2.点击绿色小箭头即可

# 3 创建应用

1.pycharm提供的终端直接输入完整命令

2.pycharm

tools

run manage.py task提示(前期不要用 给我背完整命令)

# 4 修改端口号以及创建server

edit confi....

三、 应用

"""

django是一款专门用来开发app的web框架

django框架就类似于是一所大学(空壳子)

app就类似于大学里面各个学院(具体功能的app)

比如开发淘宝

订单相关

用户相关

投诉相关

创建不同的app对应不同的功能

选课系统

学生功能

老师功能

一个app就是一个独立的功能模块

"""

***********************创建的应用一定要去配置文件中注册**********************

INSTALLED_APPS = [

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'app01.apps.App01Config', # 全写

'app01', # 简写

]

# 创建出来的的应用第一步先去配置文件中注册 其他的先不要给我干

ps:你在用pycharm创建项目的时候 pycharm可以帮你创建一个app并且自动注册

***********************************************************************

四、 主要文件介绍

-mysite项目文件夹

--mysite文件夹

---settings.py 配置文件

---urls.py路由与视图函数对应关系(路由层)

---wsgi.pywsgiref模块(不考虑)

--manage.pydjango的入口文件

--db.sqlite3django自带的sqlite3数据库(小型数据库 功能不是很多还有bug)

--app01文件夹

---admin.pydjango后台管理

---apps.py注册使用

---migrations文件夹数据库迁移记录

---models.py数据库相关的 模型类(orm)

---tests.py测试文件

---views.py视图函数(视图层)

1、 命令行与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')]

"""

五、如何正常运行Django项目

1. 计算机的名称不能有中文. 我的电脑->属性->计算机名

2. 一个pycharm窗口只开一个项目

3. 项目里面所有的文件也不要出现中文

4. python解释器尽量使用3.4~3.6之间的版本

项目排错提示: 如果你的项目报错 你点击最后一个报错信息 去源码中把逗号删掉

决绝办法参考:https://www.cnblogs.com/dingbei/p/12966750.html

六、 django小白必会三板斧

"""

HttpResponse

返回字符串类型的数据

render

返回html文件的

redirect

重定向

return redirect('https://www.mzitu.com/')

return redirect('/home/')

"""

from django.shortcuts import HttpResponse,render,redirect

# 一. 返回字符串类型的数据

return HttpResponse('字符串')

# 二. 返回HTML文件

# 1. 动态HTML页面:

return render(request,'login.html')

def ab_render(request):

# 视图函数必须要接受一个形参request

user_dict = {'username':'jason','age':18}

# 2. 动态HTML页面

'''

动态HTML页面的2种模板语法传值方式

1) 'data': user_dict

user_dict: 指定需要传给HTML文件的数据

data: 在HTML页面中操作的变量

2) locals会将所在的名称空间中所有的名字全部传递给html页面

传递给html页面的数据这里不仅仅是user_dict, 还有request

'''

# 第一种传值方式: 更加的精确 节省资源

return render(request,'01 home.html', {'data':user_dict,'date':123})

# 第二种传值方式: 当你要传的数据特别多的时候

return render(request,'01 home.html',locals())

# 三. 重定向

# 1. 返回他人的网址的重定向

: return redirect('https://baidu.com')

# 2. 返回自己的网址的重定向

return redirect('/index/')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值