DjangoMTV学习1

  • Django简介
  • Pytharm搭建Django项目
  • Django配置简介
  • 通用视图体验

Django简介

Django的MTV模式MTV分别代表:

   Model(模型):数据存取层,实现数据持久化Template(模版):表现层,负责如何把页面展示给用户View(视图):业务逻辑层,调用Model和TemplateDjango还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

Pytharm搭建Django项目


启动项目
1.由pycharm创建的直接单机运行按钮启动项目
2.由cmd创建,需要对该项目进行配置,如下

Django配置简介

"""
Django settings for Django project.Generated by 'django-admin startproject' using Django 2.0.2.For more information on this file, see
https://docs.djangoproject.com/en/2.0/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.0/ref/settings/
"""import os# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
# 项目路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
# 秘钥配置
SECRET_KEY = 'k&czldpy&$_5t2s77s-a2u!%ok-=zc&p2&ld_66b1_k7(*!uik'# SECURITY WARNING: don't run with debug turned on in production!
# 调试模式
DEBUG = True# 域名访问权限
ALLOWED_HOSTS = ['*']# Application definition
# app列表
INSTALLED_APPS = [# 内置后台管理系统'django.contrib.admin',# 内置用户认证系统'django.contrib.auth',# 记录项目中所有model元数据(orm框架)'django.contrib.contenttypes',# Session会话功能'django.contrib.sessions',# 消息提示功能'django.contrib.messages',# 查找静态资源路径'django.contrib.staticfiles',
]MIDDLEWARE = [# 内置安全机制'django.middleware.security.SecurityMiddleware',# 会员Session功能'django.contrib.sessions.middleware.SessionMiddleware',# 中间件支持中文'django.middleware.locale.LocaleMiddleware',# 处理请求信息,规范化请求内容'django.middleware.common.CommonMiddleware',# 开启CRSF防护功能'django.middleware.csrf.CsrfViewMiddleware',# 开启内置的用户认证系统'django.contrib.auth.middleware.AuthenticationMiddleware',# 开启内置的信息提示功能'django.contrib.messages.middleware.MessageMiddleware',# 防止恶意程序点击劫持'django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'Django.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]WSGI_APPLICATION = 'Django.wsgi.application'# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
#数据库配置
"""
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}
"""
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'django','USER': 'root','PASSWORD': 'root','HOST': '192.168.250.170','PORT': '3306',},
}# Password validation
# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
#用户密码验证器
AUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
#配置时区,语言
LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
# 静态文件目录
STATIC_URL = '/static/'# 设置根目录的静态资源文件夹                                   设置App(index)的静态资源文件夹
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'public_static'), os.path.join(BASE_DIR, 'index/index_static')]

创建App:代表项目应用(网站的一个或多个网页)
app的创建由manage.py实现,python manage.py startapp XXX

完成index和user创建后,要配置app

使用mysql要下载mysqlclient : pip install mysqlclient
django不能创建数据库,所以要先创建好数据库。
根据model.py生成相关的.py文件,该文件用于创建数据库表
python manage.py makemigrations
创造或修改表结构
python manage.py migrate
可以在数据库看到新建的表
(顺便提一下,数据库数据迁移,可以使用主从复制)
手动添加数据


index app下views.py添加如下代码

from django.shortcuts import render# Create your views here.
from .models import Product# def index(request):
#     return HttpResponse("hello word")def index(request):type_list = Product.objects.values('type').distinct()name_list = Product.objects.values('name', 'type')# 打印执行的sqlprint(type_list.query)print(name_list.query)context = {'type_list': type_list, 'name_list': name_list}return render(request, 'index.html', context=context, status=200)

templates新建index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><ul id="cate_box">{% for type in type_list %}<li><h3>{{ type.type }}</h3><p>{% for name in name_list %}{% if name.type == type.type %}<span>{{ name.name }}</span>{% endif %}{% endfor %}</p></li>{% endfor %}</ul>
</body>
</html>

index app下urls.py添加如下代码

from django.urls import path, re_path, include
from . import viewsurlpatterns = [# 配置简单URLpath('', views.index),]

通用视图体验

Django封装常用代码,便于快速完成数据视图开发
封装的三个类
TemplateView:直接返回HTML模板,无法展示数据库数据。
ListView:能将数据库数据返回给HTML模板,通常获取批量数据。
DetailView:能将数据库数据返回给HTML模板,通常获取单条数据。

view.py

from django.shortcuts import render# Create your views here.
from .models import Product
from django.http import HttpResponse
from django.views.generic import ListViewclass ProductList(ListView):content_object_name = "type_list"template_name = "index.html"# django.core.exceptions.ImproperlyConfigured: ProductList is missing a QuerySet. Define ProductList.model, ProductList.queryset, or override ProductList.get_queryset().queryset = Product.objects.values('type').distinct()# def get_queryset(self):#     return Product.objects.values('type').distinct()def get_context_data(self, queryset=queryset, **kwargs):context = super().get_context_data(**kwargs)context['name_list'] = Product.objects.values('name', 'type')context['type_list'] = querysetreturn context

urls.py

from . import views
from django.conf.urls import urlurlpatterns = [# 通用视图url(r'^index/$', views.ProductList.as_view()),
]

DjangoMTV学习1相关推荐

  1. Django开发学习之Django-MTV

    MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM)Template(模版):负责如何把页面展示给用户View(视图):负责业务逻辑,并在适当的时候调用 ...

  2. java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】

    类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...

  3. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  4. FastAI 2019课程学习笔记 lesson 2:自行获取数据并创建分类器

    文章目录 数据获取 google_images_download 的安装和使用 挂载google 个人硬盘到Google colab中 删除不能打开文件 创建ImageDataBunch 训练模型 解 ...

  5. FastAI 课程学习笔记 lesson 1:宠物图片分类

    文章目录 代码解析 神奇的"%" 导入fastAI 库 下载解压数据集 untar_data 获取帮助文档 help() ? ?? doc 设置路径 get_image_files ...

  6. 深度学习学习指南-工具篇

    colab Colab是由Google提供的云计算服务,通过它可以让开发者很方便的使用google的免费资源(CPU.GPU.TPU)来训练自己的模型. 学习经验总结 如何使用命令行? 通过!+cmd ...

  7. Redis学习之路(一)--下载安装redis

    redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...

  8. python内置库之学习configparser库(一)

    python内置库之学习configparser库(一) 1.引言 ini文件简介 [节] 键=值 注:节不能重复出现 2.自己封装了一个增删改查的类,可以参考一下 import configpars ...

  9. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

最新文章

  1. elif在python中啥意思_python中elif 结构语句怎么判断?
  2. 穷不可怕,可怕的是“穷人思维”
  3. GD项目回顾总结之预热
  4. 在路上,继续就好了。。。。
  5. 扩大博士研究生招生规模!
  6. myeclipse 6.5 代码提示(alt+/)不提示的修正解决办法
  7. MySQL详细安装(windows)
  8. python数据分类方法_Python数据挖掘—分类—贝叶斯分类
  9. nginx ngx_core_module(main event)
  10. Python pickle库
  11. 宏定义中#和##的用法
  12. 小米开发版安装magisk_小米6x-从零开始安装magisk
  13. wgs84坐标转换,地图拾取wgs84坐标工具推荐
  14. matlab曲线拟合详解(含fit、fittype函数及fitoptions设置)
  15. 微信小程序别踩白方块(有效果图)
  16. LVS负载均衡群集(NAT模式)
  17. unity 点击UI显示3D爆炸特效
  18. 头像上传(限制大小,格式,尺寸)
  19. 医学图像分割之Attention U-Net
  20. Latex如何插入图片

热门文章

  1. SQL Server 数据库技术及应用
  2. iPhone 6s NFC模块被破解 可与任何NFC设备对话
  3. 炎炎夏日打造一个属于自己的“便携小空调”吧
  4. 【2021】07 建模
  5. AnyDVD HD 6.1.2.3 Final
  6. (FFMpeg学习笔记):FFmpeg下载、ffmpeg.exe与ffplay.exe的基本使用
  7. 最新养鱼源码-支持商城抽奖,余额宝等,支持中英文,带安装教程
  8. Event Loop事件循环机制
  9. UG软件的简述和使用场景经验介绍
  10. ETL Automation