<Django>第一篇:入门的例子
1.MVT框架
Model(模型):数据库交互相关。在这部分一般需要进行三个操作:
(1)面向数据库:模型对象、列表
(2)定义模型类:指定属性及类型,确定表结构(设计表),需要迁移(生成表)
(3)后台管理:创建管理员,启动服务器,admin,注册admin.py,就可以在admIn中完成表的增删改查
View(视图):核心,负责业务逻辑,获取请求(从URL控制器),获取数据(从Models获取数据),返回结果(结果给Template)、配置URL(自己的应用中配置)
Template(模板):放所有html(前端模板)文件、
加载:读取文件内容到内存
渲染:根据模板填入数据
展示的内容和我的处理逻辑不相关----解耦的思想
图解:

2.入门例子
(1)安装Django
pip install django #后面可接版本号
查看版本号(这里使用的是django 2.0.2版本)
# 版本查看(进入python shell)
import django
django.get_version()
(2)创建项目
django-admin startproject 项目名称

manage.py :启动文件
settings.py:项目设置,数据库信息,调试标志及其他工作变量
urls.py :路由,路径与视图函数的映射关系
wsgi.py:项目与WSGI兼容的服务器入口,runserver命令就能使用wsgiref模块做简单web服务
用pycharm创建项目(专业版)

结果:

(3)创建应用
cd 项目名称
pyhton manage.py startapp 应用名称

(4)定义模型类(models.py)
实际上就是定义表结构,并生成表
定义模型(表结构)models.py文件
from django.db import models # Create your models here. class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateTimeField() def __str__(self):
return "%s" % self.btitle class HeroInfo(models.Model):
hname = models.CharField(max_length=20)
hgender = models.BooleanField()
hcontent = models.CharField(max_length=100)
hBook = models.ForeignKey("BookInfo",on_delete=models.CASCADE,) def __str__(self):
return "%s" % self.hname
激活模型(编辑setting.py文件,将APP加入到install_apps)----或者说把应用注册到项目里面
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'booktest',
]
生成迁移文件(实际上就是生成上述表结构对应的SQL语句)
python manage.py makemigrations
执行迁移(实际上就是利用上面SQL语句生成对应的表)
python manage.py migrate
建立管理员账户(为了进行表的管理)
python manage.py creatsuperuser
# 按照提示依次输入账号、邮箱、密码(不能全是数字缺大于8位)
管理界面中文(设置Settings.py文件)
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
把模型类注册到管理里面去(admin.py,这个文件就用作管理的)-----后台管理
from django.contrib import admin
# python3 写法
from .models import * # Register your models here.
# 关联注册 (内部停靠),
# class HeroInfoline(admin.StackedInline):
# 表格效果
class HeroInfoline(admin.TabularInline):
# 嵌入哪个类(一对多中,多的部分)
model = HeroInfo
# 增加一本图书的时候,还可以增加2个heroinfo
extra = 2 class BookInfoAdmin(admin.ModelAdmin):
# 列表页显示
# 列表
list_display = ['id', 'btitle', 'bpub_date']
# 过滤
list_filter = ['btitle']
# 搜索(支持模糊查询)
search_fields = ['btitle']
# 分页(每页显示多少条)
list_per_page = 10 # 添加页,修改页
# 展示列表fields 和 fieldsets只能同时存在一个,功能一致
# fields = ['bpub_date','btitle']
# 分组
fieldsets = [
('base', {'fields': ['btitle']}),
('super', {'fields': ['bpub_date']})
] # 关联注册第二步,关联起来(一对多中,一的部分)
inlines = [HeroInfoline] # admin.site.register(BookInfo)
# 注册
admin.site.register(BookInfo, BookInfoAdmin)
admin.site.register(HeroInfo)
(5)定义视图(views.py)----本质就是函数
from django.shortcuts import render # response request
from django.http import * # 引用模板需要需要引入的包;loader(加载)
from django.template import RequestContext, loader # 通过模型类拿数据
from .models import * # Create your views here.
# 这里要创建index页面
def index(request):
'''
# 加载模板
temp = loader.get_template('booktest/index.html')
# 渲染模板,执行模板内容render()
return HttpResponse(temp.render())
'''
# 通过模型查数据
bookList = BookInfo.objects.all()
# 传入的数据
context = {'list':bookList}
# 封装成render函数 一步即可
return render(request, 'booktest/index.html',context)
(6)配置url(urls.py)
主urls
from django.contrib import admin
from django.urls import path
from booktest import views
# 分发urls
from django.conf.urls import include urlpatterns = [
path('admin/', admin.site.urls),
# 正则
path('index/', views.index),
# 分发urls,使用APP里面配置urls
path('',include('booktest.urls')),
]
一般为了防止主urls挂掉,影响全部APP,会在每个APP里面建立分urls(在app里创建urls.py文件)
from django.urls import path
from booktest import views urlpatterns = [
path('123/', views.index),
]
(7)创建模板(template)
为了简化在views里面对数据的处理,在项目同级目录建立template文件夹,并根据APP名称建立对应的文件夹,在文件夹里在建立模板

为了能导入模板,除了上面在views.py的设定外,还需要在setting.py中设定模板路径
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',
],
},
},
]
index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
{#遍历list#}
{% for book in list %}
<li>{{book.btitle}}</li>
{% endfor %} </body>
</html>
(0)运行django ---创建好Django,随时都可以进行
python manage.py runserver
运行结果

<Django>第一篇:入门的例子的更多相关文章
- 第一篇 入门必备 (Android学习笔记)
第一篇 入门必备 第1章 初识Android 第2章 搭建你的开发环境 第3章 创建第一个程序--HelloWorld 第4章 使用Android工具 ●Android之父 Android安迪·罗 ...
- 学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳
学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 9 / 25 转载请注明出处!️ 目录 学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳 ...
- log4cxx入门第一篇--一个小例子
先看官网:http://logging.apache.org/log4cxx/index.html 转载自:http://wenku.baidu.com/view/d88ab5a9d1f34693da ...
- storm第一篇--概念,例子,参数优化
1 概念 目前最新的0.8.0版本里面 worker -> 进程.一个worker只能执行同一个spout/bolt的task,一个worker里面可以有多个executor. executor ...
- django第一篇
摘要: 1 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.模型即后端逻辑,视图就是url对应的前端展示 2本文简介了使用模型 ...
- svn第一篇----入门指南
摘要:trunk存放的是主代码,不修改,branch,tag,milestone均是从trunk中衍生的.branch复制trunk中代码用于开发,tag用于存放比较重要的发行版,存放release版 ...
- curl讲解第一篇---入门和基本使用
概念 它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP. curl同样支持HTTPS认证,HTTP POST方法, ...
- elasticsearch 第一篇(入门篇)
介绍 elasticsearch是一个高效的.可扩展的全文搜索引擎 基本概念 Near Realtime(NRT): es是一个接近实时查询平台,意味从存储一条数据到可以索引到数据时差很小,通常在1s ...
- Quartz -第一篇-入门
学习地址:https://www.imooc.com/learn/846 官网:www.quartz-scheduler.org 特点:分布式+集群 设计模式: 工厂模式 builder模式 组件模式 ...
随机推荐
- CSS盒模型及应用
其实,CSS就三个大模块: 盒子模型 . 浮动 . 定位,其余的都是细节.要求这三部分,无论如何也要学的非常精通. 所谓盒子模型就是把HTML页面中的元素看作是一个矩形的盒子,也就是一个盛装内容的容器 ...
- MLE极大似然估计和EM最大期望算法
机器学习十大算法之一:EM算法.能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题.神为什么是神,因为神能做很多人做不了的事.那么EM ...
- spark出现BINLOG_FORMAT = STATEMENT
错误解决: Caused by: java.sql.SQLException: Cannot execute statement: impossible to write to binary log ...
- NOIp2018集训test-10-4/test-10-5 (联考四day1/day2)
这个day1稍微有点毒瘤吧?? DAY1 排列 以前总是把day1t1想太复杂了翻车,差不多往正解的方向想了一下感觉不可能这么复杂这可是noipday1t1啊一定有非常简单的方法然后翻车了?? 题目转 ...
- 简单理解js回调函数
前言 其实回调函数简单通俗点就是当有a和b两个函数,当a作为参数传给b,并在b中执行,这时a就是一个回调(callback)函数,如果a是一个匿名函数,则为匿名回调函数那下面们来通过一个实例来具体解释 ...
- 移动端多选插件-jquery
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- (转)简述负载均衡&CDN技术
转:http://www.cnblogs.com/mokafamily/p/4402366.html#commentform 曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维 ...
- hdu多校第六场1012 (hdu6645) Stay Real 假博弈,真贪心
题意: 给你一个小根堆,从根开始拿,拿走子节点被拿完后才可以拿走父节点,两个人依次拿,谁拿的节点总和大谁获胜,问你谁有必胜策略. 题解: 小根堆中,每个点的权值总是不小于父亲节点的权值.所以无论怎么取 ...
- this 关键字的使用及说明
this 是Java 中常见的一个关键字,它的主要作用是引用类的当前实例,本篇文章主要介绍 this 关键字的几种使用情况. 1. this 调用当前类的变量,也就是类中的成员变量. 代码示例: pu ...
- MySQL数据库中,将一个字段的值分割成多条数据显示
本文主要记录如何在MySQL数据库中,将一个字符串分割成多条数据显示. 外键有时是以字符串的形式存储,例如 12,13,14 这种,如果以这种形式存储,则不能直接与其他表关联查询,此时就需要将该字段的 ...