• Django基础


    一、Python Web框架分类

    按功能分类:
    a:收发消息相关(socket)
    b:根据不用的URL执行不同的函数(业务逻辑相关的)
    c:实现动态网页(字符串的替换)

    Web框架分类:
    1. 自己实现b,c,使用第三方的a      --> Django框架
    2. 自己实现b,使用第三方的a和c      --> Flask框架
    3. 自己实现ac                              --> Tornado框架

    二、Django基础

    1、安装Django

    2、创建Django项目

    1)、命令行中创建
    django-admin startproject 项目名
    2)、Pycharm中创建

    3、运行Django项目(启动服务器)

    1)、命令行中运行
    python mange.py runserver 127.0.0.1:端口号
    2)、Pycharm中运行

    4、Django项目的目录结构

    mysite:项目的容器。
    manage.py: 一个实用的命令行工具,可以各种方式与该 Django 项目进行交互。
    mysite/__init__.py:一个空文件,告诉 Python 该目录是一个 Python 包。
    mysite/settings.py:该 Django 项目的设置/配置。
    mysite/urls.py:Django项目的URL声明,URL和函数的对应关系,一份由 Django 驱动的网站"目录"
    mysite/wsgi.py:一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

    WSGI相关知识

    WSGI(Web Server Gateway Interface):Web服务器网关接口
    WSGI位于web应用程序与web服务器之间,是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。

    WSGI入口处提供一个start_respone用于回调(callback),入口会连接到出口的一个函数,并传递environ字典和start_respone作为参数;而出口处的函数先是调用start_respone并传递status和header,然后再返回content。

    Python代码实现WSGI:
    def application(environ, start_respone):
        status = '200 OK'
        response_header = [('Content-type', 'text/plain')]
        start_response(status, response_headers)
    return ['Hello']

    WSGI: Python 的 HTTP 接口协议
    CGI: 通用网关接口,古老的动态 HTTP 服务方式,极其低效、容易出漏洞。Perl 盛行的时代很常用。
    Tornado: HTTP 服务器、WSGI 框架
    FastCGI: PHP 等的接口协议。PHP 也是唯一一个把 FastCGI 实现得像 CGI 的 FastCGI 实现(HTTP 头可通过环境变量访问)
    uwsgi: 它是一个软件。是 WSGI、PSGI 等等的容器。也就是它实现了这些协议。同样实现了 WSGI 的还有 gunicorn 之类的。
    nginx: 可以作为代理,把 HTTP 传给 Tornado。也可以作为网关,把 HTTP 转成 FastCGI、uwsgi 协议传给后边的程序。

    WSGI、CGI等标准就是让WEB服务器知道找谁处理请求;让应用程序知道请求是什么,响应返回给谁。

    6、静态文件配置(存放CSS、js文件)

    STATIC_URL = '/static/'      # HTML中使用的静态文件夹前缀,相当于静态文件的别名
    STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),      # 静态文件存放位置
    ]

    三、Django基础必备三件套

    1)、HttpResponse
    内部传入一个字符串参数(响应体内容),返回给浏览器

    from django.shortcuts import HttpResponse
    def 页面名(request):
        业务逻辑代码
        return HttpResponse(字符串)

    2)、render
    from django.shortcuts import render
    def 页面名(request):
        业务逻辑代码
        return render(request, 'html文件', 字典)     打开一个文件,把文件的内容读取出来。字典对应html中的变量{{ }}

    3)、redirect

    接受一个URL参数,表示跳转到指定的URL

    from django.shortcuts import redirect
    def 页面名(request):
        业务逻辑代码
        return redirect('URL')

    四、Django表单

    Django获取form表单post过来的数据:
    request.method   -->   获取的是请求的方法(GET/POST...),必须是大写!!!
    request.POST  -->  获取POST提交过来的全部数据(字典)
    request.POST.get('password')

    五、APP

    一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码。

    项目和APP的区别就是一个是配置,另一个是代码:一个项目包含很多个Django app以及对它们的配置

    技术上,项目的作用是提供配置文件,比方说哪里定义数据库连接信息、安装的app列表、TEMPLATE_DIRS等等。

    一个app是一套Django功能的集合,通常包括模型和视图,按Python的包结构的方式存在。例如,Django本身内建有一些app,例如注释系统和自动管理界面。

    app的一个关键点是它们是很容易移植到其他项目和被多个项目复用。

    1、创建app

    1)、通过命令行创建:

    python manage.py startapp app的名字

    2)、Pycharm创建:
    Tools  -->  Run manage.py Task  -->  在下方弹出的命令窗口输入:startapp app的名字

    一个app包含的文件:
    __init__.py     为空文件,表示该目录下的文件是一个整体模块
    models.py     文件中定义各类数据表格类
    views.py

    2、app配置

    创建好app之后,还需要对其进行注册,告诉Django已经创建了这个app。

    在settings.py的INSTALLED_APPS添加一行(行末尾不要忘记逗号):
    'app的名字.apps.app的名字Config',

    六、Django里的ORM创建步骤

    0)、手动新建数据库

    1)、首先告诉Django连接哪个数据库

    settings.py --> DATABASES
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',           #Django默认为sqlite3,需改为mysql
            'NAME': 'db1',                                                   #数据库名改为自己创建的
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'USER': 'root',
            'PASSWORD': 123,
        }
    }

    2)、接着告诉Django怎么连接数据库

    Django默认使用的是 MySQLdb模块连接数据库,要告诉Django用pymysql这个模块去连接MySQL

    在settings.py同目录下的__init__.py,指定使用pymysql模块代替MySQLdb

    import pymysql
    pymysql.install_as_MySQLdb()

    3)、在app/models.py文件中定义类,类一定要继承models.Model

    4)、最后执行创建表的操作

    命令行创建:
    1. python manage.py makemigrations   --> 将models.py的修改登记到小本本上(小本本是app -- migrations-0001_initial.py)
    2. python manage.py migrate                --> 将修改翻译成SQL语句,去数据库执行

    七、新建Django项目的步骤:

    1、创建项目和APP
    2、创建数据库和配置数据库
    3、配置templates和静态文件相关
    4、注释掉setting.py中的csrf那一行


    八、Django项目的业务流程逻辑

    1、在urls.py中添加用户访问的URL与将要执行的函数的对应关系

    2、执行函数需要写在 app项目--views.py 中,执行函数的逻辑:用ORM查询数据库,在页面中显示出来

    1)、执行函数:
    获取数据:models.ORM类.objects.all()      相当于SQL中的select * from
                      models.ORM类.objects.filter(条件)       相当于SQL中的where,可设置条件过滤结果
                      models.ORM类.objects.get(条件)       获取单个对象
                      models.ORM类.objects.order_by(条件)     数据排序
    添加数据:.save()
    更新数据:models.ORM类.objects.update()
    删除数据:models.ORM类.objects.delete()

    2)、return返回(不加return页面无法显示)

    3、html文档添加特殊的符号,等待被替换

    1)、if/else 标签
    根据条件判断是否输出。if/else 支持嵌套,接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not )

    语法:
    {% if 条件 %}
        html代码
    {% endif %}

    或:
    {% if 条件1 %}
        html代码
    {% elif 条件2 %}
        html代码
    {% else %}
        html代码
    {% endif %}

    2)、for 循环标签
    在一个序列上迭代,循环语法是 for X in Y。可以嵌套使用 {% for %} 标签
    每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容

    3)、ifequal/ifnotequal 标签
    {% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值,支持可选的 {% else%}

    4)、注释标签
    {# 注释内容 #}

    5)、过滤器
    模板过滤器可以在变量被显示前修改它,过滤器使用管道字符
    如:{{ name|lower }},意思是{{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写

    过滤管道可以被 套接 ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:{{ my_list|first|upper }},意思是将第一个元素并将其转化为大写

    6)、include 标签
    {% include %} 标签允许在模板中包含其它的模板的内容

    7)、模板继承

  • 相关阅读:
    锁(lock)和闩(latch)
    <线程池-定时任务> ScheduledExecutorService之shutdown引发的RejectedExecutionException问题
    get与post需要注意的几点 (转)
    TCP 的那些事儿(上)(转)
    程序员编程艺术:面试和算法心得-(转 July)
    存根类(stub) 是什么意思?有什么作用?(转)
    A writer of dictionaries,a harmless druge.
    第四次作业--项目选题报告(团队)
    第五次作业--原型设计(结对)
    第三次作业--团队展示(团队)
  • 原文地址:https://www.cnblogs.com/Python1/p/9168951.html
Copyright © 2020-2023  润新知