• Django初识


    什么是Web应用?

    1、Web应用程序是一种可以通过Web访问的应用程序。Web应用程序的一个最大好处是用户可以很容易访问应用程序。用户只需要有浏览器即可,不需要再按照其他软件。

    软件开发架构

    1、B/S架构 :浏览器/服务器

    2、C/S架构 :客户端/服务器

    本质上B/S架构其实就是C/S架构

    HTTP协议

    1、超文本传输协议:规定了客户端与服务端消息传出的格式

    conn.send(b'HTTP/1.1 200 OK
    
    ')

    四大特性

    1、基于TCP/IP协议作用于应用层的协议

    2、基于请求响应

    3、无状态

    4、无连接

    数据格式之请求

    1、请求首行(状态信息,请求信息)

    2、请求头(一堆k:v键值对)

    3、空格( )

    4、请求体(POST请求携带的数据)

    数据格式之响应

    同上

    响应状态码(Status Code)

    表示当前请求是否成功

    1开头:服务器已经成功接收到你的数据正在处理,您可以继续提交数据

    2开头:请求成功。服务器已经将您的请求的数据发送给你了

    3开头:内部重定向,指跳转到另一个网页

    4开头:请求资源错误

    5开头:服务器错误

    请求首行
    b'GET / HTTP/1.1
    
    请求头(一大堆kv键值对)
    Host: 127.0.0.1:8080
    
    Connection: keep-alive
    
    Upgrade-Insecure-Requests: 1
    
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
    
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
    
    Accept-Encoding: gzip, deflate, br
    
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
    
    
    
    请求体
    '

    手写Web服务

    server = socket.socket()  # 不传参数默认就是TCP协议
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    
    
    while True:
        conn, addr = server.accept()  # 阻塞 等待客户端链接
        data = conn.recv(1024)
        conn.send(b'HTTP/1.1 200 OK
    
    ')
        print(data)
        # 手动处理http数据获取用户访问的路径
        current_path = data.decode('utf-8').split('
    ')[0].split(' ')[1]
        if current_path == '/index':
            # 路由匹配上之后返回index
            # conn.send(b'<h1>index</h1>')
            with open('index.html','rb') as f:
                conn.send(f.read())
        else:
            # 当匹配不上的时候统一返回404
            conn.send(b'404')
    
        conn.close()
    
    手写web服务
    手写web服务

    动静态网页

    静态网页:
        页面上的数据都是写死的,万年不变
    动态网页:
        页面上的数据是从后端动态获取的
        比如后端获取当前时间
        后端获取数据库数据然后传递给前端页面

    模板渲染

    后端生成的数据直接传递给前端页面使用(并且前端页面可以灵活的操作改数据) >>> 模板语法

    模板渲染 模板语法需要依赖于第三方模块

    pip install jinja2

    模板语法  jinja2支持前端直接使用类似于python的语法操作数据

    <p>{{ user_dic }}</p>
        <p>{{ user_dic.name }}</p>
        <p>{{ user_dic['password'] }}</p>
        <p>{{ user_dic.get('name') }}</p>
        
        {% for user in user_dict %}  <!--[{},{},{},{}]-->
            <tr>
                <td>{{ user.id }}</td>
                <td>{{ user.name }}</td>
                <td>{{ user.password }}</td>
            </tr>
        {% endfor %}
        

    templates

    改文件夹存放就是所有的页面文件(.html)

    什么是web框架?

    Web框架: 别人已经设定好的一个Web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子。

    一般Web框架的架构是这样的:

    python三大主流web框架
    Django:大而全,自带了很多功能模块,类似于航空母舰 (缺点:有点笨重)
    Flask:短小精悍,自带的功能模块特别少,大部分都是依赖于第三方模块(小而轻)
    Tornado:异步非阻塞 主要用在处理高io 多路复用的情况 可以写游戏后端

    a:socket
    b:路由与视图函数
    c:模板渲染
    
    Django:
        a用的别人的 wsgiref
        b自己写的
        c自己写的
    Flask:
        a用的别人的 werkzeug
        b自己写的
        c用的别人的 jinja2
    Tornado:
        a,b,c都是自己写的

    注意事项

    1.计算机的名称不能有中文
    2.一个pycharm窗口就是一个项目,不要多个项目放在一个窗口里面
    3.项目名不能起中文

    MVC模式和MTV模式

    MVC全名Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

    • M(Models) --> 操作数据库

    • V(Views) --> 放置HTML模板

    • C(Controller) --> 处理用户请求

    MTV:有些WEB框架觉得MVC的字面意思很别扭,就给它改了一下。view不再是HTML相关,而是主业务逻辑了,相当于控制器。html被放在Templates中,称作模板,于是MVC就变成了MTV。这其实就是一个文字游戏,和MVC本质上是一样的,换了个名字和叫法而已,换汤不换药。

    • M(Models) --> 操作数据库

    • T(Template) --> 放置HTML模板

    • V(Views) --> 处理用户请求

    Django安装

    pip install  django            #安装最新版本的Django
    
    pip install  django==1.11.11  #或者指定安装版本

    pycharm下载

    常用命令

    # 查看django版本
    $ python -m django --version
    
    # 创建项目,名为mysite
    $ django-admin startproject mysite
    
    # 启动django
    $ python manage.py runserver
    $ python manage.py runserver 8080
    $ python manage.py runserver 0.0.0.0:8000
    
    # 创建应用程序,确保和 manage.py 是同一目录
    $ python manage.py startapp app01
    
    # 运行创造模型变化迁移
    $ python manage.py makemigrations
    
    # 运行应用模型变化到数据库
    $ python manage.py migrate
    
    # admin创建管理员用户
    $ python manage.py createsuperuser

    pycharm创建Django

    强调:项目名称不能有中文

    创建app

    第一种

    第二种

    第三种

    Tools下面run manage task功能栏

    app(应用)的概念

    一个django项目就是一所大学
    app就是大学里面的学院

    注意如果手动创建app的话需要在配置文件中注册才能生效(*******************)

    基本目录结构及作用:

    mysite/              # 项目的容器,名字随便起

      app01
        migrations 数据库迁移记录相关数据
          admin.py django后台管理相关
          models.py 模型表相关
          views.py 视图函数相关

       manage.py        # 命令行实用工具,以各种方式与该Django项目进行交互
        mysite/          # 实际的Python项目
            __init__.py  # 空文件,导入不出错
            settings.py  # 这个Django项目配置
            urls.py      # 这个Django项目的URL声明; 一个Django驱动网站的“目录”
            wsgi.py      # 一个入口点为WSGI兼容的Web服务器,以满足您的项目

     路由URL

    URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。URL的家在是从配置文件中开始。

    参数说明:
    
    一个正则表达式字符串
    一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
    可选的要传递给视图函数的默认参数(字典形式)
    一个可选的name参数
    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
     
    urlpatterns = [
        #url(r'^admin/', admin.site.urls),
        url(r'^index/', views.index),
    ]

    views(编写业务处理逻辑)

    HttpResponse 返回字符串

    from django.shortcuts import render
     
    #首先导入HttpResponse模块
    from django.shortcuts import HttpResponse
    # Create your views here.
     
    def index(request):
        """
         
        :param request: 这个参数必须有,类似self的默认规则,可以改,它封装了用户请求的所有内容
        :return: 不能直接返回字符串,必须有HttpResponse这个类封装起来,这是Django的规则
        """
        return HttpResponse("Hello,World")

    render 返回一个HTML页面并且支持模板渲染

    首先需要在templates文件夹内创建html页面

    from django.shortcuts import render
    
    # Create your views here.
    
    def login(request):
        return render(request,'login.html')

    redirect 重定向

    from django.shortcuts import redirect
    
    # Create your views here.
    
    def reg(request):
        return redirect('https://www.baidu.com')

    django小白必会三板斧

    from django.shortcuts import render,HttpResponse,redirect
    HttpResponse  返回字符串
    render        返回一个html页面
        两种给前端页面传值的方式
            def reg(request):
                user_dict = {'name':'jason','password':'123'}
                return render(request,'reg.html',{'user_dict':user_dict})
            
            def reg(request):
                user_dict = {'name':'jason','password':'123'}
                return render(request,'reg.html',locals())
                
    redirect      重定向
  • 相关阅读:
    C++程序代写实现HashSet class
    EL表达式
    Hibernate的事务管理
    ThreadLocal理解
    SOA框架
    JVM垃圾回收机制
    Htpp通讯协议详解
    Android模拟器使用SD卡
    android 开发-HttpClient状态码定义
    android 开发-文件存储之读写sdcard
  • 原文地址:https://www.cnblogs.com/zhengyuli/p/10981926.html
Copyright © 2020-2023  润新知