dango之day01

目录

一:纯手撸web框架(掌握思路)

二:基于wsgiref模块写web框架(掌握思路),以及代码的优化

三:如何使用jinja2模块

四:动静态网页

五:模板语法

六:Python主流的web框架

七:django框架简介

八:django的基本操作命令

九:命令行创建和pycharm创建的django项目的区别

十:django的目录结构

十一:小白必会3板斧

作业:

一:纯手撸web框架(思路)

1.什么是web框架?

  • 基于互联网的web服务端(socket服务端)

2.请求方式都有哪几种?

  • 1.post:向服务端提交数据

  • 2.get:向服务端索要数据

3.代码

import socket
​
server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen(5)
​
while True:
    sock, addr = server.accept()
    data = sock.recv(1024)
    sock.send(b'HTTP/1.1 200 OK \r\n\r\n')
    target_url = data.decode('utf8').split(' ')[1]
    print(target_url)  # / /index /register
​
    if target_url == '/index':
        sock.send(b'index')
    elif target_url == '/register':
        sock.send(b'register')
    else:
        sock.send(b'404 error')

4.上面代码存在的缺陷

  • 1.socket代码冗余

  • 2.对请求数据格式的处理复杂且重复

  • 3.不同的后缀匹配相应网址的方法太LOW

二:基于wsgiref模块写web框架(思路),以及代码的优化

1.目的:

  • 推导django框架的产生过程

  • 启动文件

from wsgiref.simple_server import make_server
from urls import urls
from views import *
​
​
def run(request, response):
    """
    :param request: 请求数据
    :param response: 响应数据
    :return: 返回给客户端的数据
    """
    response('200 OK', [])  # 固定代码
    target_path = request.get('PATH_INFO')
    func_name = None
    for url_tuple in urls:
        if url_tuple[0] == target_path:
            func_name = url_tuple[1]
            break  # 
    if func_name:
        res = func_name(request)
    else:
        res = error(request)
    return [res.encode('utf8')]
​
​
if __name__ == '__main__':
    server = make_server('127.0.0.1', 8080, run)
    server.serve_forever()  # 永久启动
  • urls.py文件

from views import *
urls = (
    ('/home', home),
    ('/index', index),
    ('/login', login),
    ('/register', register),
)
  • views.py文件

def index(request):
    return 'index'
def login(request):
    return 'login'
def register(request):
    return 'register'

2.上述代码解决了哪些问题?

  • 1.socket代码冗余

  • 2.对请求数据格式的处理复杂且重复

三:如何使用jinja2模块

1.功能:

jinja2能够让我们在html文件内使用类似于后端的语法来操作各种数据类型

from jinja2 import Template
def get_dict(request):
    user_dict = {'name': 'jason', 'pwd': 123, 'hobby': ['read', 'run', 'music']}
    with open(r'templates/myhtml04.html','r',encoding='utf8') as f:
        data = f.read()
    temp = Template(data)
    res = temp.render(data=user_dict) 
    return res

四:动静态网页

1.动态网页:页面上的数据是从后端传入的

2.静态网页:页面上的数据是固定写好的,要修改只能修改源码

五:模板语法

<h1>{{ data }}</h1>
<h1>{{ data['name'] }}</h1>
<h1>{{ data.get('pwd') }}</h1>
<h1>{{ data.hobby }}</h1> 
​
{% for user in user_data %}
    <tr>
        <td>{{ user.id }}</td>
        <td>{{ user.name }}</td>
        <td>{{ user.age }}</td>
    </tr>
{% endfor %}

六:Python主流的web框架

1.django框架

大而全 自身携带的功能非常的多 类似于航空母舰 缺陷:开发小项目的时候使用该框架有点笨重(大材小用)

2.flask框架

小而精 自身携带的功能非常的少 类似于特种兵 主要依赖于第三方模块 缺陷:受限于第三方模块的开发

3.tornado框架

异步非阻塞 该框架快到可以作为游戏服务器 缺陷:上手难度是三者最高的

4.fastapi框架、sanic框架

最近流行的

七:django框架简介

1.版本:

  • 1.x 同步 1.1

  • 2.x 同步 2.2

  • 3.x 同步 3.2

八:django的基本操作命令

1.创建django项目:django-admin startproject 项目名称

2.启动django项目:

  • 1.先切换到项目目录下:cd 项目目录

  • 2.执行这个命令:python38 manage.py runserver ip:port

  • 3.创建app: python38 manage.py startapp 应用名称

  • 4.验证django是否下载成功:cmd终端输入django-admin

九:命令行创建和pycharm创建的django项目的区别

  • 1.命令行不会自动创建templates文件夹

  • 2.命令行不会在配置文件编写关于templates文件夹的配置 'DIRS': [os.path.join(BASE_DIR, 'templates')]

  • 3.pycharm自动创建的第一个应用会自动注册到配置文件中

  • 4.针对db.sqlite3文件不用去在乎它有没有创建 只要运行了django会自动出来

十:django的目录结构

  • settings.py 配置文件
  • urls.py 路由层
  • wsgi.py django服务 基本不用
  • manage.py 入口文件
  • templates文件夹 模板层
  • migrations文件夹 orm相关的数据库操作记录
  • admin.py django自带的后台管理
  • models.py 模型层
  • tests.py 自带的测试文件
  • views.py 视图层
  • db.sqlite3 自带的小型数据库

十一:小白必会3板斧

  • 1.HttpResponse 返回字符串类型的数据
  • def index(request):
        return HttpResponse('这是一个视图函数')

  • 2.render 返回html页面,支持模板语法
  • def index(request):
        return render(request, 'index.html')

  • 3.redirect 重定向
  • def index(request):
        return redirect('https://www.baidu.com')

作业:

路由层

urlpatterns = [
    path('show_info/', views.show_info),
]

视图层

from jinja2 import Template
import pymysql
def show_info(request):
    conn = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        password='888',
        database='dj01',
        charset='utf8',
        autocommit=True
    )
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql = 'select * from userinfo'
    cursor.execute(sql)
    user_data = cursor.fetchall()
    with open(r'templates/1.html', 'r', encoding='utf8') as f:
        data = f.read()
    temp = Template(data)
    res = temp.render(user_data=user_data)
    return HttpResponse(res)

html文件

<div class="container">
        <div class="row">
            <h1 class="text-center">数据展示</h1>
            <div class="col-md-8 col-md-offset-2">
                <table class="table table-hover table-striped">
                    <thead>
                        <tr>
                            <th>主键</th>
                            <th>姓名</th>
                            <th>年龄</th>
                            <th>爱好</th>
                        </tr>
                    </thead>
                    <tbody>
                        {% for user in user_data %}
                            <tr>
                                <td>{{user.id}}</td>
                                <td>{{user.name}}</td>
                                <td>{{user.age}}</td>
                                <td>{{user.hobby}}</td>
                            </tr>
                        {% endfor %}
                    </tbody>
                </table>
            </div>
        </div>
    </div>

结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值