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 代码性能优化技巧分享
Aug 07 Python
通过python下载FTP上的文件夹的实现代码
Feb 10 Python
python回调函数的使用方法
Jan 23 Python
动态规划之矩阵连乘问题Python实现方法
Nov 27 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
Jul 12 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
Python的argparse库使用详解
Oct 09 Python
python全栈知识点总结
Jul 01 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
Python socket非阻塞模块应用示例
Sep 12 Python
python对象转字典的两种实现方式示例
Nov 07 Python
在Django中实现添加user到group并查看
Nov 18 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中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
PHP连接access数据库
2015/03/27 PHP
PHP读取Excel类文件
2017/05/15 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
js 自带的 map() 方法全面了解
2016/08/16 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
Python中处理unchecked未捕获异常实例
2015/01/17 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
python修改字典键(key)的方法
2019/08/05 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
数学教育专业求职信
2014/07/22 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
2014年办公室工作总结范文
2014/11/12 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python