专栏首页测试游记测试开发进阶(二十)

测试开发进阶(二十)

Django基础

1.为什么要使用框架来开发

  • 站在巨人的肩膀上
  • 提升开发效率
  • 只关注业务逻辑的实现,不关心底层建设

2.Django vs Flask

  • Django

  • 大而全
  • 入门简单
  • 最流行
  • 类似于精装修的房子
  • Flaks

  • 轻量级
  • 定制化程度高
  • 流行
  • 高手的玩偶
  • 类似于毛坯房

3.Django是什么

Django makes it easier to build better Web apps more quickly and with less code.

4.特点

  • 提供创建项目工程自动化工具
  • 数据库ORM支持
  • 模版
  • 表单
  • Admin管理站点
  • 文件管理
  • 认证权限
  • session机制
  • 缓存

创建工程

命令行创建

  1. 安装Django
$ pip install Django
  1. 创建项目
$ django-admin startproject 项目名
  1. 运行项目
$ python manage.py runserver
$ python manage.py runserver ip:端口

使用Pycharm创建项目

注意:使用Pycharm专业版

启动

国际化

修改 settings.py中的

  • LANGUAGE_CODEzh-hans
  • TIME_ZONEAsia/Shanghai

页面展示的内容就会变成中文

创建子应用

  • 业务功能模块复用
  • 将工程项目拆分为不同的子功能模块,以子应用的形式存在
  • 各功能模块间可以保持相对的独立
  • 可以将该模块代码整体复制过去

创建

$ python manage.pt startapp 子应用

注册

在全局配置文件 settings.pyINSTALLED_APPS添加 'projects.apps.ProjectsConfig'

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 注册子应用
    # 子应用名.apps.子应用名首字母大写Config
    'projects.apps.ProjectsConfig',
]

子应用创建一个视图

# projects/views.py
from django.shortcuts import render
from django.http import HttpResponse


# Create your views here.

def index(request):
    return HttpResponse('<h1>「测试游记」</h1>')
# LearnDjango/urls.py
from django.contrib import admin
from django.urls import path
from projects.views import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', index),
]

刷新页面后可以发现首页消失

根据提示访问:http://127.0.0.1:8000/index/

LearnDjango/urls.py

全局路由配置

  1. urlpatterns为固定名称的列表
  2. 列表中的一个元素,就代表一条路由
  3. 从上到下进行匹配,如果能匹配上,Django会导入和调用path函数第二个参数指定的视图(或子路由)
  4. 如果匹配不上会自动抛出404异常
  5. 5.

使用子路由

# projects/urls.py
# -*- coding:utf-8 -*-
"""
@Describe: urls
@Author: zhongxin
@Time: 2019-09-24 07:42
@Email: 490336534@qq.com
"""

from django.urls import path
from .views import index

urlpatterns = [
    path('', index),
]
# LearnDjango/urls.py
from django.contrib import admin
from django.urls import path
from django.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', include('projects.urls'))
]

每个应用(模块)都会维护一个子路由(当前应用的路由消息) 跟主路由一样,也是由上到下进行匹配 能匹配上,则执行path第二个参数指定的视图,匹配不上抛出404异常

视图

函数视图

def index(request):
    return HttpResponse('<h1>「测试游记」</h1>')

上面就是一个 函数视图

视图函数第一个参数 request是HttpRequest对象,包含前端用户的所有请求信息

必须返回一个HttpResponse对象或者子对象

def index(request):
    if request.method == 'GET':
        return HttpResponse('<h1>「测试游记」GET请求</h1>')
    elif request.method == 'POST':
        return HttpResponse('<h1>「测试游记」POST请求</h1>')
    else:
        return HttpResponse('<h1>「测试游记」其他请求</h1>')

使用 postman进行测试

类视图

# projects/views.py
from django.views import View
class IndexView(View):
    """
    index 主页类视图
    """

    def get(self, request):
        return HttpResponse('<h1>「测试游记」类视图GET请求</h1>')

    def post(self, request):
        return HttpResponse('<h1>「测试游记」类视图POST请求</h1>')
# projects/urls.py
from django.urls import path
from projects import views

urlpatterns = [
    path('', views.IndexView.as_view()),
]

可以看到其他请求返回了 405

模版

新建 templates/demo.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>「测试游记」</title>
</head>
<body>
<h1>「测试游记」模版</h1>
</body>
</html>

修改视图 returnrender(request,'demo.html')

class IndexView(View):
    """
    index 主页类视图
    """

    def get(self, request):
        return render(request,'demo.html')

    def post(self, request):
        return HttpResponse('<h1>「测试游记」类视图POST请求</h1>')

查看页面

MVT

M:模型(Model) 与MVC中的M功能相同,负责和数据库交互,进行数据处理

V:视图(View) 与MVC中的C功能相同,接收请求,进行业务处理,返回响应

T:模版(Template)与MVC中的V功能相同,负责构造要返回的html页面

数据库 <--------> M模型 <--请求/返回数据--> V视图 <--请求/返回模版内容--> T模版<--展示--> 客户端

本文分享自微信公众号 - 测试游记(zx94_11),作者:zx钟

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django学习_简易博客(一)

    zx钟
  • 测试开发进阶(四十六)

    由于移动端的碎片化特征,需要确保App产品能够在不同系统版本,不同屏幕分辨率,不同系统定制ROM也能够有好的用户体验

    zx钟
  • 测试开发进阶(三十一)

    使用base64加密之后的header + . + 使用base64加密之后的playload + 使用HS256算法加密,同时secret加盐处理

    zx钟
  • 如何将win10家庭版升级到win10专业版

    家庭版系统是绝大多数新电脑厂商出厂默认的系统,很多功能都无法使用,有些软件也不支持家庭版本,那么如何将家庭版系统升级为专业版呢,接下就给大家说下步骤,

    用户5459522
  • 10万奖金、190万真实问答数据,智源-看山杯请你为100万个问题找到最合适的“谢邀”

    知识分享服务成为目前全球互联网的重要、最受欢迎的应用类型之一,在知识分享或问答社区中,问题数远远超过有质量的回复数。如何连接知识、专家和用户,增加专家的回答意愿...

    大数据文摘
  • Kaggle 神器 xgboost

    在 Kaggle 的很多比赛中,我们可以看到很多 winner 喜欢用 xgboost,而且获得非常好的表现,今天就来看看 xgboost 到底是什么以及如何应...

    杨熹
  • 揭秘Kaggle神器xgboost

    用户1737318
  • Spark Streaming与Kafka如何保证数据零丢失

    Spark Streaming 是一种构建在 Spark 上的实时计算框架,它扩展了 Spark 处理大规模流式数据的能力。Spark Streaming 的优...

    smartsi
  • 【swift学习笔记】五.使用枚举优雅的管理Segue

      在做页面转跳的时候,我们要给Segue命名,如果Segue多了,管理他们就是一个恶梦。我们可以枚举更优雅的管理这些Segue。   1.我们先来建立一个pr...

    lpxxn
  • Java设计模式-单例模式-枚举

    1)这借助于JDK1.5中添加的枚举来实现单例模式。不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象

    桑鱼

扫码关注云+社区

领取腾讯云代金券