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>第一篇:入门的例子的更多相关文章

  1. 第一篇 入门必备 (Android学习笔记)

    第一篇 入门必备 第1章 初识Android 第2章 搭建你的开发环境 第3章 创建第一个程序--HelloWorld 第4章 使用Android工具   ●Android之父 Android安迪·罗 ...

  2. 学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳

    学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 9 / 25 转载请注明出处!️ 目录 学会Git玩转GitHub(第一篇) 入门详解 - 精简归纳 ...

  3. log4cxx入门第一篇--一个小例子

    先看官网:http://logging.apache.org/log4cxx/index.html 转载自:http://wenku.baidu.com/view/d88ab5a9d1f34693da ...

  4. storm第一篇--概念,例子,参数优化

    1 概念 目前最新的0.8.0版本里面 worker -> 进程.一个worker只能执行同一个spout/bolt的task,一个worker里面可以有多个executor. executor ...

  5. django第一篇

    摘要: 1 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.模型即后端逻辑,视图就是url对应的前端展示 2本文简介了使用模型 ...

  6. svn第一篇----入门指南

    摘要:trunk存放的是主代码,不修改,branch,tag,milestone均是从trunk中衍生的.branch复制trunk中代码用于开发,tag用于存放比较重要的发行版,存放release版 ...

  7. curl讲解第一篇---入门和基本使用

    概念 它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP. curl同样支持HTTPS认证,HTTP POST方法, ...

  8. elasticsearch 第一篇(入门篇)

    介绍 elasticsearch是一个高效的.可扩展的全文搜索引擎 基本概念 Near Realtime(NRT): es是一个接近实时查询平台,意味从存储一条数据到可以索引到数据时差很小,通常在1s ...

  9. Quartz -第一篇-入门

    学习地址:https://www.imooc.com/learn/846 官网:www.quartz-scheduler.org 特点:分布式+集群 设计模式: 工厂模式 builder模式 组件模式 ...

随机推荐

  1. PHP setrawcookie() 函数

    定义和用法 setrawcookie() 函数不对 cookie 值进行 URL 编码,发送一个 HTTP cookie. cookie 是由服务器发送到浏览器的变量.cookie 通常是服务器嵌入到 ...

  2. NOIp2018集训test-9-2(pm)

    其实这套题我爆0了,T1define 写成ddefine编译错误 T2有两个变量爆int 但是我看zwh不在悄悄地改了,我心里还是十分愧疚(没有)的.主要是林巨已经虐我125了要是再虐我200分我大概 ...

  3. c++ 11新特性学习1

    static_assert 静态断言,特点是编译期的断言检查 assert 运行时期的断言检查 二者参数用法相同

  4. 基于Netty的RPC架构学习笔记(六):netty5案例学习

    文章目录 netty5服务端入门案例 netty5客户端入门案例 单客户端多连接程序 知识普及 线程池原理图 对象池原理图 对象组原理图 结论 理论结合实际 开干开干 总结 netty5服务端入门案例 ...

  5. jQuery 基本选择器

    1 基本选择器 $(‘#id属性值’)  ----------->document.getElementById() $(‘tag标签名称’)----------->document.ge ...

  6. sql准确判断某个ip

    问题:如图 当我执行sql要准确查找某个IP是属于哪个库室时候,我刚开始是这样写的 select * from Definition_Read_Room where HFIP like '%172.2 ...

  7. HDU1595-find the longest of the shortest-dijkstra+记录路径

    Marica is very angry with Mirko because he found a new girlfriend and she seeks revenge.Since she do ...

  8. LeetCode刷题笔记-回溯法-分割回文串

    题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab"输出:[ ["aa", ...

  9. linux就该这么学--资料整理--持续更新

    基础命令 服务管理 systemctl redhat7 systemctl start foo.service 启动服务 systemctl restart foo.service 重启服务 syst ...

  10. JS函数 函数的作用,可以写一次代码,然后反复地重用这个代码。

    什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. 如:我们要完成多组数和的功能. var sum; sum = 3+2; alert(sum); sum=7+8 ; alert(sum ...