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的高级Git库 Gittle
Sep 22 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
深入解析Python中的线程同步方法
Jun 14 Python
Python制作简易注册登录系统
Dec 15 Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
python2 与 python3 实现共存的方法
Jul 12 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
基于keras输出中间层结果的2种实现方式
Jan 24 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中的一个中文字符串截取函数
2007/02/14 PHP
php之字符串变相相减的代码
2007/03/19 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
php 远程关机操作的代码
2008/12/05 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
2014/10/17 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
python模拟enum枚举类型的方法小结
2015/04/30 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
django列表筛选功能的实现代码
2020/03/27 Python
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
小学生放飞梦想演讲稿
2014/08/26 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python