一个超级小的 Django 项目.

一个超级小的 Django 项目.

Posted November 12, 2018

Django 可以支持类似于Flask 一样的单文件项目.

当用最简单的代码实现 Django 项目为最基本的要素的时候, 项目可以和微框架一样小.

但我建议, 最好不要这样做, 因为在选择使用 Django 的时候, 我比较看重的 Django 封装的一系列模块, 我更建议用 Django 官方提供的架构去开始我的工程。

Introduction

首先我们知道, 在我们安装 Django 之后, Django 和其他 Python 包一样, 在site-packages里面, 这意味着 Django 和其他的 Python 包一样(Requests, Pillow, NumPy).

验证 Django 是否安装最简单的方法是到交互式界面导入它

Python

>>> import django
>>> print(django.get_version())
1.11.4

但是我们使用 Django 和使用其他包不一样, 在官方推荐的例子下, 我们开始一个项目首先执行的是startproject

我们执行后, 会初始化创建默认的项目目录结构:

  • manage.py
  • settings.py
  • urls.py
  • wsgi.py

这就是常用的预配置

加入我们要做一个 web 项目, 你可能需要数据库, 处理用户的身份验证, 和会话等功能。 startproject会让我们对这些的处理和配置更加轻松. 而且 Django 默认就提供这些功能, 这让我们能够直接引用.

但这样不是开始项目的唯一方式, 这也是本章的目的。

最小的 Django 程序

app.py

Python

import sys

from django.conf import settings
from django.conf.urls import url
from django.core.management import execute_from_command_line
from django.http import HttpResponse

settings.configure(
    DEBUG=True,
    SECRET_KEY='A-random-secret-key!',
    ROOT_URLCONF=sys.modules[__name__],
)


def index(request):
    return HttpResponse('<h1>A minimal Django response!</h1>')

urlpatterns = [
    url(r'^$', index),
]

if __name__ == '__main__':
    execute_from_command_line(sys.argv)

SECRET_KEY是我们必须要提供的一个参数, DEBUG默认是 False, 没有开启 DEBUG 的情况需要定义ALLOWED_HOSTS配置, 所以我们直接覆盖 DEBUG 为 True. ROOT_URLCONF 是需要包含 URL 列表的特殊模块路径. 其实就是我们项目的urls.py文件. 在这里我们写到一个文件里面了, 所以我们直接定义sys.modules[__name__]表示当前模块, 并在当前文件下面定义urlpatterns列表, 定义的方式和urls.py一样和视图view对应起来.

然后通过execute_from_command_line快捷方式启动, 这个保留了 manage.py 命令的功能.

使用

由于没有其他的APP 在 INSTALLED_APPS里面, 默认情况下只有 django 项目. 所以只有一些最基本的命令功能.

Bash

$ python app.py

Type 'app.py help <subcommand>' for help on a specific subcommand.

Available subcommands:

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    runserver
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver

启动

我们使用 runserver 把程序启动

Bash

$ python app.py runserver

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏邹立巍的专栏

Linux 的进程间通信:消息队列

Linux 环境提供了 XSI 和 POSIX 两套消息队列,本文将帮助您掌握以下内容:如何使用 XSI 消息队列,如何使用 POSIX 消息队列,它们的底层实...

7240
来自专栏草根专栏

用 Identity Server 4 (JWKS 端点和 RS256 算法) 来保护 Python web api

[新添加] 本文对应的源码 (多个flow, clients, 调用python api): https://github.com/solenovex/Iden...

3838
来自专栏散尽浮华

Centos7下关于系统用户密码规则-运维笔记

1)密码长度、有效期 /etc/login.defs文件是当创建用户时的一些规划,比如创建用户时,是否需要家目录,UID和GID的范围;用户的期限等等,这个文...

3584
来自专栏匠心独运的博客

消息中间件—RabbitMQ(集群监控篇1)

摘要:任何没有监控的系统上线,一旦在生产环境发生故障,那么排查和修复问题的及时性将无法得到保证

2513
来自专栏linux驱动个人学习

cyclictest 简介

1. cyclictest 简介以及安装 1.1 cyclictest 简介       cyclictest 是什么? 看名字应该就能大致猜出来它是一种 te...

5504
来自专栏云计算

腾讯云支持 Terraform 开发实践

这篇文章从系统架构开始,到核心库讲解,到实践开发,再到单元测试,比较完整的描述了支持Terraform的开发全过程。

4.1K17
来自专栏Greenplum

Linux 常用命令(二)

Linux是一套免费使用和自由传播的类Unix操作系统(主要用在服务器上),接下来详细的介绍一下linux的一些知识。

2400
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列26-spring(5)-资源管理、与struts区别、核心等

Java面试系列26-spring(5)-资源管理、与struts区别、核心等 25.Spring如何实现资源管理? 使用applicationContext....

3355
来自专栏刘望舒

Android系统启动流程(三)解析SyetemServer进程启动过程

前言 上一篇我们学习了Zygote进程,并且知道Zygote进程启动了SyetemServer进程,那么这一篇我们就来学习Android7.0版本的Syetem...

2166
来自专栏IT技术精选文摘

JVM致命错误日志(hs_err_pid.log)分析

当jvm出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导致cr...

5855

扫码关注云+社区

领取腾讯云代金券