Django网络框架之HelloDjango项目创建教程


Posted in Python onJune 06, 2019

本文实例讲述了Django网络框架之HelloDjango项目。分享给大家供大家参考,具体如下:

这里将带你从零开始创建一个Django项目,包含完整的MTV架构、创建子应用,及访问静态资源;

项目GitHub地址:https://github.com/ouyangsuo/HelloDjango;

@创建Django项目

  • 首先进入特定的虚拟开发环境,参考创建虚拟开发环境
  • 在终端cd到特定目录,执行:
django-admin.py startproject HelloDjango
  • 查看工程目录结构
sudo apt install tree
tree HelloDjango/

Django网络框架之HelloDjango项目创建教程

工程的创建也可以在PyCharm中通过新建工程并选择DjangoProject来实现;
@工程目录说明

HelloDjango
_init_.py

  • 代表HelloDjango是一个包模块
  • 可以在其中做全局的初始化动作,例如:导入和初始化数据库

settings.py

  • Django项目的配置文件,包含但不限于如下配置:
  • 本项目引用的组件;
  • 已安装的应用;
  • 数据库配置;
  • 时间语言配置;
  • 静态文件访问地址和存储路径;

urls.py

  • 用于维护项目的URL路由映射(当客户端访问时由哪个函数进行响应);
  • 响应函数通常写在项目和子应用的views.py文件中;
  • 路由定义例如下图,表示当用户通过http://yourhost:port/home/发起 访问时,该请求通过views.py中的home函数进行响应(此处的views.py需要手动创建);
from HelloDjango import views
url(r'^home/$', views.home)

wsgi.py

  • 定义WSGI的接口信息;
  • 用于服务器部署;
  • 通常使用系统默认设置即可;
  • 项目部署将在后续章节中继续讲述;

manage.py

  • Django用于管理本项目的命令行工具,无需修改,功能包括但不限于:
  • 运行站点;
  • 进行数据迁移操作;

@创建子应用

  • 终端执行
python manage.py startapp MyApp

在HelloDjango的settings.py中注册应用

# 配置应用
INSTALLED_APPS = [
    # 一堆默认的django应用
    ...
    # 自定义的应用
    'MyApp',
]

@应用目录结构说明

  • _ init _.py:代表当前目录是一个包;
  • admin.py:管理站点模型的声明文件,默认为空;
  • apps.py:应用信息定义文件,在其中生成了AppConfig,该类用于定义应用名等数据;
  • models.py:添加模型层数据类文件;
  • views.py:定义URL相应函数(路由规则);
  • migrations包:自动生成,数据迁移文件;
  • tests.py:测试代码文件

@定义数据模型(Models)

定义班级类,在MyApp目录下的models.py中插入如下代码

# 班级类
class Grade(models.Model):
  # 班级名称
  gname = models.CharField(max_length=10)
  # 开班日期
  gdate = models.DateTimeField()
  # 女生数量
  ggirlnum = models.IntegerField()
  # 男生数量
  gboynum = models.IntegerField()
  # 是否已逻辑删除该班级
  isDelete = models.BooleanField(default=False)
  # 定义班级的打印输出信息
  def __str__(self):
    return self.gname

在models.py中定义学生类

# 学生类
class Students(models.Model):
  # 学生姓名
  sname = models.CharField(max_length=20)
  # 学生性别
  sgender = models.BooleanField(default=True)
  # 学生年龄
  sage = models.IntegerField()
  # 备注信息
  sinfo = models.CharField(max_length=20)
  # 是否已逻辑删除该学生
  isDelete = models.BooleanField(default=False)
  # 学生所属的班级
  sgrade = models.ForeignKey(Grade)

@执行数据迁移

数据迁移的概念,就是将模型映射到数据库的过程;

生成迁移文件(在MyApp下的migrations包中)

python manage.py makemigrations

执行数据迁移

python mananger.py migrate
  • 迁移过后,框架为我们自动生成了库表,Django默认自带的数据库是SQLite数据库;
  • 数据库文件生成路径为工程根目录下的db.sqlite3;
  • 生成的数据表结构如图

Django网络框架之HelloDjango项目创建教程

@生造一些数据

生造班级数据如下

Django网络框架之HelloDjango项目创建教程

生造学生数据如下

Django网络框架之HelloDjango项目创建教程

@创建页面(Templates)

修改HelloDjango下的settings.py中的模板配置

TEMPLATES = [
  {
    ...
    # 将模板页面放在根目录/templates目录下的
    'DIRS': [
      os.path.join(BASE_DIR, 'templates'),
    ],
    ...
  },
]

修改settings.py中的模板配置中的静态资源配置

# 静态文件访问路由
STATIC_URL = '/static/'
# 静态文件存储目录:根目录/static/
STATICFILES_DIRS = [
  os.path.join(BASE_DIR, 'static'),
]

创建【根目录/static/img/】目录并丢入dameinv.jpg

创建templates目录并在其中创建dameinv.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>大美女</title>
</head>
<body>
大美女来鸟~<br>
{# 加载静态资源 #}
{% load static %}
{# 加载图片位置 #}
<img src="{% static 'img/dameinv.jpg' %}" alt="我是大美女">
</body>
</html>

@定义路由映射(Views)

在HelloDjango下的urls.py中插入如下代码

from HelloDjango import views
from MyApp.admin import site
# 分发路由请求
urlpatterns = [
  # url(r'^admin/', admin.site.urls),
  url(r'^admin/', site.urls),
  # http://127.0.0.1:8000/请求交由HelloDjango下的views中的index函数处理
  url(r'^$',views.index),
  # http://127.0.0.1:8000/dameinv请求交由HelloDjango下的views中的dameinv函数处理
  url(r'^dameinv/',views.dameinv),
  # http://127.0.0.1:8000/myapp/xxx统统交由MyApp下的urls重新分发
  url(r'^myapp/',include('MyApp.urls'))
]

在MyApp的urls.py中插入如下代码

# 定义路由映射
urlpatterns = [

  # 请求http://127.0.0.1:8000/myapp/,交由MyApp下的views.py中的welcome函数处理
  url(r'^$', views.welcome)
]

@定义路由处理函数(Views)

在HelloDjango下的views中插入如下代码

# 处理http://127.0.0.1:8000/
def index(request):
  # 直接在页面输出内容
  return HttpResponse('Django:江中自有黄金屋,屋里把那代码撸,江中自有颜如玉,硬盘堆满几百G')
# http://127.0.0.1:8000/dameinv/
def dameinv(request):
  # 渲染页面并呈现给用户
  return render(request,'dameinv.html')

在MyApp下的views.py中插入如下代码

def welcome(request):

# 查询所有学生
students = Students.objects.all()
# 构造数据字典
data={
  'students':students
}
# 将数据丢给templates/welcome.html进行渲染并呈现给用户
return render(request,'welcome.html',context=data)

@运行项目

终端执行如下命令中的一条:

python manage.py runserver
python manage.py runserver [port]
python manage.py runserver [ip:port]
  • 默认使用8000端口;
  • ip指定为0.0.0.0的时候,匹配本机的全部ip;

@访问测试

访问127.0.0.1:8002/

Django网络框架之HelloDjango项目创建教程

访问127.0.0.1:8002/dameinv/

Django网络框架之HelloDjango项目创建教程

访问127.0.0.1:8002/myapp/

Django网络框架之HelloDjango项目创建教程

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
python实现的文件同步服务器实例
Jun 02 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
Python利用BeautifulSoup解析Html的方法示例
Jul 30 Python
浅谈机器学习需要的了解的十大算法
Dec 15 Python
python整合ffmpeg实现视频文件的批量转换
May 31 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
python将字母转化为数字实例方法
Oct 04 Python
TensorFlow实现checkpoint文件转换为pb文件
Feb 10 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
浅谈Python中的生成器和迭代器
Jun 19 Python
python打包多类型文件的操作方法
Sep 21 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 #Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 #Python
浅析Python3中的对象垃圾收集机制
Jun 06 #Python
聊聊python里如何用Borg pattern实现的单例模式
Jun 06 #Python
使用Python实现毫秒级抢单功能
Jun 06 #Python
使用celery执行Django串行异步任务的方法步骤
Jun 06 #Python
python opencv摄像头的简单应用
Jun 06 #Python
You might like
php语言流程控制中的主动与被动
2012/11/05 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python 连连看连接算法
2008/11/22 Python
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python实现把xml或xsl转换为html格式
2015/04/08 Python
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
致1500米运动员广播稿
2014/02/07 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
工厂车间标语
2014/06/19 职场文书
农行心得体会
2014/09/02 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
公务员政审材料范文
2014/12/23 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书