热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django()

手动编写一个web简易框架importsocketserversocket.socket()server.bind(('127.0.0.1',8080))serve

手动编写一个web简易框架


import socket
server
= socket.socket()
server.bind(
(
127.0.0.1, 8080)
)
server.listen(
5)
"""
b‘GET /index HTTP/1.1\r\n
Host: 127.0.0.1:8080\r\n
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36\r\n
Sec-Fetch-User: ?1\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
Sec-Fetch-Site: none\r\n
Sec-Fetch-Mode: navigate\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n\r\n‘
"""
while True:
conn, addr
= server.accept()
data
= conn.recv(1024)
# print(data)
conn.send(bHTTP/1.1 200 OK\r\n\r\n)
data
= data.decode(utf-8) # 将字节变成字符串
# 获取用户网址后的输入
target_url = data.split(\r\n)[0].split( )[1]
# print(target_url)
if target_url == /index:
conn.send(b
index)
elif target_url == /login:
with open(r
D:\Python13期\day36\templates\demo.html, rb)as f:
conn.send(f.read())
else:
conn.send(b
404 error)
conn.close()


基于wsgiref模块设计

文件拆分:

urls.py: 路由与视图函数的对应关系
views.py: 里面就是放的一堆视图函数(视图函数可以是函数也可以是类)
templates文件夹: 里面放的就是一堆html文件(模板文件夹)


基于wsgiref模块以及文件拆分特点:

1.先在urls文件中写url与函数的对应关系
2.再去views文件中写对应的函数

示例:


技术分享图片技术分享图片

from wsgiref.simple_server import make_server
from day36.urls import urls
from day36.views import *
def run(env, response):
"""
:param env: 请求相关的所有数据
:param response: 响应相关的所有数据
:return: 浏览器能够接收的内容
"""
response(
200 OK, [])
# env: 大字典里面的PATH_INFO参数就是用户输入的后缀
target_url = env.get(PATH_INFO)
func
= None
for url in urls:
if target_url == url[0]:
func
= url[1]
break
if func:
res
= func(env)
else:
res
= error_404(env)
return [res.encode(utf-8)]
if __name__ == __main__:
server
= make_server(
127.0.0.1, 8080, run
)
# 启动服务端
server.serve_forever()


run.py

技术分享图片技术分享图片

from day36.views import *
# 路由视图函数对应关系
urls = [
(
/index, index),
(
/login, login),
(
/get_time, get_time),
(
/get_dic, get_dic),
(
/get_db, get_db)
]


urls.py

技术分享图片技术分享图片

import time
from jinja2 import Template
import pymysql
def index(env):
return index
def login(env):
return login
def error_404(env):
return 404 error
def get_time(env):
current_time
= time.strftime(%Y-%m-%d %X)
with open(r
D:\Python13期\day36\templates\get_time.html, r)as f:
data
= f.read()
data
= data.replace(time, current_time)
return data
def get_dic(env):
user_dic
= {
username: tank,
pwd: 123,
hobby: [read, run, talk]
}
with open(r
D:\Python13期\day36\templates\get_dic.html, r)as f:
data
= f.read()
temp
= Template(data)
res
= temp.render(dic1=user_dic)
return res
def get_db(env):
conn
= pymysql.connect(
host
=127.0.0.1,
port
=3306,
user
=root,
password
=123,
database
=test1,
charset
=utf8,
autocommit
=True
)
cursor
= conn.cursor(cursor=pymysql.cursors.DictCursor)
sql
= select * from teacher
cursor.execute(sql)
data
= cursor.fetchall()
with open(r
D:\Python13期\day36\templates\get_db.html, r, encoding=utf-8)as f:
res
= f.read()
tmp
= Template(res)
res
= tmp.render(db=data)
return res


view.py

3.创建一个templates文件夹,里面用来存放HTML文件


jinja2模块

提供了一个可以在html页面上书写类似于python后端的代码 来操作数据(模板语法)


{{ xxx }}
<p>{{xxx.username}}p>
<p>{{xxx[‘password‘]}}p>
<p>{{xxx.get(‘hobby‘)}}p>
<p>{{xxx.get(‘hobby‘)[0]}}p>
<p>{{xxx.get(‘hobby‘).1}}p>


后端大致框架

1.路由与视图函数对应关系
2.视图函数
3.模板文件夹
4.模板语法(是在后端实现的 前端根本不识别)


django框架

1.注意事项

- 计算机名称不能有中文
- 项目文件名也不要用中文
- 一个pycharm窗口就是一个单独的完整的项目


2.创建django项目


命令行: 

  创建django项目:django-admin startproject mysite(项目名)

  启动django项目(先切换到项目目录下):python3 manage.py runserver # django默认的端口号是8000

  创建具有独立功能的app:python manage.py startapp app01


pycharm快捷创建

两者创建区别: 

1.使用命令行创建的django项目是不会自动创建templates摸版本文件夹 你只能自己手动创建
2.命令行创建的django项目不但没有templates文件夹配置文件中也没有填写路径,而pycharm创建的会自动添加


3.app概念

app就是应用意思

django其实是一个专注于开发app的web框架,一个空的django项目就类似于是一所大学,app就类似于大学里面的各个学院,每个app其实就类似于不同的功能模块

例如一个购物网站:

用户相关 user
  用户相关的app
订单相关 order
  订单相关的app
投诉相关 tousu
  投诉相关的app
不同的功能模块推荐使用不同的app去开发

django支持多app


4.django主要文件功能


mysite
-mysite
--__init__.py
--settings.py 项目配置文件
--urls.py 路由视图函数对应关系 项目的总路由
--wsgi.py
-manage.py
app01
--migrations文件夹 数据库改动记录
----__init__.py
--__init__.py
--admin.py django后台管理
--apps.py 注册app相关
--models.py 模型类(ORM)
--tests.py 测试文件
--views.py 视图函数(******)
app02
--migrations文件夹 数据库改动记录
----__init__.py
--__init__.py
--admin.py django后台管理
--apps.py 注册app相关
--models.py 模型类(ORM)
--tests.py 测试文件
--views.py 视图函数(******)
db.sqlite3 django自带的一个小型用于本地测试的数据库(对日期格式的数据不是很敏感)


5.django三板斧

HttpResponse:返回字符串

render:返回html页面  并且可以给html页面传数据

redirect:重定向


def index(request):
return HttpResponse(你好啊)
def login(request):
return render(
request,
login.html,
{
user_dic: {username: jason, password: 123}}
)
def home(request):
return redirect(http://www.baidu.com)


推荐阅读
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 自动验证时页面显示问题的解决方法
    在使用自动验证功能时,页面未能正确显示错误信息。通过使用 `dump($info->getError())` 可以帮助诊断和解决问题。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
  • 解决Win10下MySQL连接问题:Navicat 2003无法连接到本地MySQL服务器(10061)
    本文介绍如何在Windows 10环境下解决Navicat 2003无法连接到本地MySQL服务器的问题,包括启动MySQL服务和检查配置文件的方法。 ... [详细]
  • Webpack 初探:Import 和 Require 的使用
    本文介绍了 Webpack 中 Import 和 Require 的基本概念和使用方法,帮助读者更好地理解和应用模块化开发。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 本文介绍了 AngularJS 中的 $compile 服务及其用法,通过示例代码展示了如何使用 $compile 动态编译和链接 HTML 元素。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 数字资产量化交易通过大数据分析,以客观的方式制定交易决策,有效减少人为的主观判断和情绪影响。本文介绍了几种常见的数字资产量化交易策略,包括搬砖套利和趋势交易,并探讨了量化交易软件的开发前景。 ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
author-avatar
太2真人05
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有