Model模型的实战操作笔记

1. 创建数据库和表

  • 进入MySQL数据库创建数据库:mytest
  • 进入数据库创建数据表:mytest_users

    CREATE TABLE `mytest_users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(32) NOT NULL,
    `age` tinyint(3) unsigned NOT NULL DEFAULT '20',
    `phone` varchar(16) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
  • 添加几条测试数据

2. 创建项目demo和应用mytest

# 创建项目框架demo
$ django-admin startproject demo $ cd demo # 在项目中创建一个mytest应用
$ python3.6 manage.py startapp mytest # 创建模板目录
$ mkdir templates
$ mkdir templates/mytest $ cd .. $ tree demo demo
├── demo
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── mytest
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── templates
└── mytest

3. 执行数据库连接配置,网站配置

3.1 编辑demo/demo/__init__.py文件,添加Pymysql的数据库操作支持

import pymysql
pymysql.install_as_MySQLdb()

3.2 编辑demo/demo/settings.py文件,配置数据库连接

...
#配置自己的服务器IP地址
ALLOWED_HOSTS = ['192.168.103.240'] ...
#添加自己应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mytest',
]
... # 配置模板路径信息
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',
],
},
},
] ...
# 数据库连接配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'root',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': '3306',
}
...

4. 定义Model类

4.1 编辑demo/mytest/models.py

from django.db import models

class Users(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField(default=20)
phone = models.CharField(max_length=16) def __str__(self):
return self.name+":"+self.phone

4.2 测试Model类的使用

在项目根目录下执行命令: python3.6 manage.py shell

[root@localhost demo]# ls
demo manage.py mytest [root@localhost demo]# python3.6 manage.py shell
Python 3.6.1 (default, Jul 18 2017, 01:35:19)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole) >>> from mytest.models import Users >>> Users.objects.all()
<QuerySet [<Users: 张三:12345678901>, <Users: aa:13456789023>]> >>> s = Users.objects.get(id=1) >>> s.id
1 >>> s.name
'张三' >>> s.age
20 >>> s.phone
'12345678901' >>>

5. 实现Web端访问

5.1 编辑demo/demo/settings.py文件.做 ALLOWED_HOSTS 主机访问配置(若第三步已做可跳过此步骤)

#此处添加自己的IP地址
ALLOWED_HOSTS = ['192.168.2.240']

5.2 编写项目主路由urls配置,配置对mytest应用路由的访问连接配置

from django.conf.urls import include,url
from django.contrib import admin urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^mytest/', include('mytest.urls')),
]

5.3 配置当前应用mytest的路由配置

在mytest应用目录下创建一个路由文件urls.py文件,注意此文件编码为utf-8(建议复制一个)。

编辑应用中的路由配置文件:demo/mytest/urls.py, 内容如下:

from django.conf.urls import url

from . import views

urlpatterns = [
url(r'^$', views.index, name="index"),
]

5.4 编辑视图文件:demo/mytest/views.py,内容如下

#from django.shortcuts import render
from django.http import HttpResponse from mytest.models import Users def index(request):
try:
s = Users.objects.get(id=1)
return HttpResponse(s)
except:
return HttpResponse("没有找到对应的信息!")

5.5 测试

项目根目录下运行python3.6 manage.py sunserver 0:8000命令,开启服务:

[root@localhost demo]# python3.6 manage.py runserver 0:8000
Performing system checks... System check identified no issues (0 silenced). July 28, 2017 - 14:01:52
Django version 1.11, using settings 'demo.settings'
Starting development server at http://0:8000/
Quit the server with CONTROL-C.

打开浏览器,在浏览其中输入网址测试:http://192.168.2.240:8000/mytest/

显示结果:张三:12345678901

继续上面操作完成Web版的Users信息增 删 改 查

1. 准备模板文件,创建模板目录

  1. 在项目目录下创建templates模板目录
  2. 进入模板目录templates,在模板目录下创建应用名mytest的目录
  3. 进入mytest目录,在里面创建一个users目录
  4. 进入users目录,在里面创建文件:index.html,add.html,edit.html,menu.html,info.html
  5. 设置模板目录信息:编辑demo/demo/settings.py文件(若第三步已做可跳过此步骤)
...
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates'),],
'APP_DIRS': True,
...

2. 配置路由信息

打开文件:demo/mytest/urls.py路由文件,加入六条路由配置信息

from django.conf.urls import url

from . import views

urlpatterns = [
url(r'^$', views.index, name="index"),
url(r'^users$', views.indexUsers, name="users"), #浏览用户信息
url(r'^users/add$', views.addUsers, name="addusers"), #加载添加用户信息表单
url(r'^users/insert$', views.insertUsers, name="insertusers"), #执行用户信息添加
url(r'^users/(?P<uid>[0-9]+)/del$', views.delUsers, name="delusers"), #执行用户信息删除
url(r'^users/(?P<uid>[0-9]+)/edit$', views.editUsers, name="editusers"), #加载用户信息编辑表单
url(r'^users/update$', views.updateUsers, name="updateusers"), #执行用户信息编辑
]

3. 编写视图文件:demo/mytest/views.py

# 注意:需导入from django.shortcuts import render

from django.shortcuts import render
from django.http import HttpResponse from mytest.models import Users def index(request):
try:
list = Users.objects.filter(id__in=[1,3,5])
s = ','.join([vo.name for vo in list]) #修改(将id值为5的age值改为30)
#ob = Users.objects.get(id=5)
#ob.age = 30
#ob.save() #删除(删除id为3的信息)
#ob = Users.objects.get(id=3)
#ob.delete() return HttpResponse(s)
except:
return HttpResponse("没有找到对应的信息!") # 浏览用户信息
def indexUsers(request):
# 执行数据查询,并放置到模板中
list = Users.objects.all()
context = {"stulist":list}
return render(request,"mytest/users/index.html",context) # 加载添加信息表单
def addUsers(request):
return render(request,"mytest/users/add.html") # 执行信息添加操作
def insertUsers(request):
try:
ob = Users()
ob.name = request.POST['name']
ob.age = request.POST['age']
ob.phone = request.POST['phone']
ob.save()
context = {'info':'添加成功!'}
except:
context = {'info':'添加失败!'}
return render(request,"mytest/users/info.html",context) # 执行信息删除操作
def delUsers(request,uid):
try:
ob = Users.objects.get(id=uid)
ob.delete()
context = {'info':'删除成功!'}
except:
context = {'info':'删除失败!'}
return render(request,"mytest/users/info.html",context) # 加载信息编辑表单
def editUsers(request,uid):
try:
ob = Users.objects.get(id=uid)
context = {'user':ob}
return render(request,"mytest/users/edit.html",context)
except:
context = {'info':'没有找到要修改的信息!'}
return render(request,"mytest/users/info.html",context) # 执行信息编辑操作
def updateUsers(request):
try:
ob = Users.objects.get(id= request.POST['id'])
ob.name = request.POST['name']
ob.age = request.POST['age']
ob.phone = request.POST['phone']
ob.save()
context = {'info':'修改成功!'}
except:
context = {'info':'修改失败!'}
return render(request,"mytest/users/info.html",context)

4. 编辑浏览信息视图文件:

文件位置:demo/templates/mytest/users/index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>用户信息管理</title>
<script>
//自定义执行信息删除提示判断,参数uu是成功的删除url地址
function doDel(uu){
if(confirm("确定要删除吗?")){
//网页跳转
window.location=uu;
}
} </script>
</head>
<body>
<center> { % include 'mytest/users/menu.html' % } <h3>浏览用户信息</h3>
<table width="800" border="1">
<tr>
<th>id号</th>
<th>姓名</th>
<th>年龄</th>
<th>电话</th>
<th>操作</th>
</tr>
{ % for stu in stulist % }
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td>
<a href="{ % url 'editusers' stu.id % }">编辑</a>
<a href="javascript:doDel('{ % url 'delusers' stu.id % }');">删除</a>
</td>
</tr>
{ % endfor % }
</table>
</center>
</body>
</html>

5. 编辑添加表单视图文件

文件位置:demo/templates/mytest/users/add.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>用户信息管理</title>
</head>
<body>
<center>
{ % include "mytest/users/menu.html" % } <h3>添加用户信息</h3>
<form action="{ % url 'insertusers' % }" method="post">
{ % csrf_token % }
<table width="280" border="0">
<tr>
<td>姓名:</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="age"/></td>
</tr>
<tr>
<td>电话:</td>
<td><input type="text" name="phone"/></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="添加"/>
<input type="reset" value="重置"/>
</td>
</tr>
</table>
</form>
</center>
</body>
</html>

6. 编辑信息表单视图文件

文件位置:demo/templates/mytest/users/edit.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>用户信息管理</title>
</head>
<body>
<center>
{ % include "mytest/users/menu.html" % }
<h3>修改用户信息</h3>
<form action="{ % url 'updateusers' % }" method="post">
<input type="hidden" name="id" value=""/>
{ % csrf_token % }
<table width="280" border="0">
<tr>
<td>姓名:</td>
<td><input type="text" name="name" value=""/></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="age" value=""/></td>
</tr>
<tr>
<td>电话:</td>
<td><input type="text" name="phone" value=""/></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="编辑"/>
<input type="reset" value="重置"/>
</td>
</tr>
</table>
</form>
</center>
</body>
</html>

7. 编辑公共导航栏页视图文件

文件位置:demo/templates/mytest/users/menu.html

<h2>用户信息管理</h2>
<a href="{ % url 'users' % }">浏览用户</a> |
<a href="{ % url 'addusers' % }">添加用户</a>
<hr/>

文件位置:demo/templates/mytest/users/info.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>用户信息管理</title>
</head>
<body>
<center>
{ % include "mytest/users/menu.html" % } <h3></h3> </center>
</body>
</html>

Django Model模型的实战操作笔记的更多相关文章

  1. django Model模型二及Model模型对数据库的操作

    在django模型中负责与数据库交互的为Model层,Model层提供了一个基于orm的交互框架 一:创建一个最基本的Model from __future__ import unicode_lite ...

  2. Django Model 模型

    参考: https://www.runoob.com/django/django-model.html https://www.cnblogs.com/taosiyu/p/11260000.html ...

  3. Django Model模型

    Model简介 模型准确且唯一的描述了数据.它包含您储存的数据的重要字段和行为.一般来说,每一个模型都映射一张数据库表. 每个模型都是一个 Python 的类,这些类继承 django.db.mode ...

  4. Django基础核心技术之Model模型的介绍与设计

    Django基础核心技术之Model模型的介绍与设计原创: Yunbo Shi Python Web与Django开发 2018-05-03Django网络应用开发的5项基础核心技术包括模型(Mode ...

  5. Django学习之四:Django Model模块

    目录 Django Model 模型 MODEL需要在脑子里记住的基础概念 区分清楚,必须不能混淆的 class Meta 内嵌元数据定义类 简单model创建实例 数据源配置 接着通过models在 ...

  6. 64、django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  7. 67、django之模型层(model)--查询补充及mookie

    本篇导航: F查询与Q查询 cookie 一.F查询与Q查询 1.以Book表为例 class Book(models.Model) : title = models.CharField(max_le ...

  8. django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  9. django之模型层(model)--查询补充及cookie

    已经连续写了好几篇django的模型层(model)增删改查的随笔了,没篇大篇幅都是查询相关的操作,可以看出查询在数据的操作中是多么的重要,而本篇最后再补充一点关于关于查询的一些方法,模型层基本的操作 ...

随机推荐

  1. 使用docker查看jvm状态,在docker中使用jmap,jstat

    Docker中查看JVM的信息: 1.     列出docker容器:docker ps 2.     标准输入和关联终端:docker exec -it 容器ID  bash 3.     查找出j ...

  2. CSS之边框

    <!DOCTYPE html> <!--边框--> <html lang="en"> <head> <meta charset ...

  3. Sqluldr2 libclntsh.so报错处理

    Sqluldr2 libclntsh.so报错处理 处理报错 [oracle@oracledg tmp]$ ./sqluldr2linux64.bin ./sqluldr2linux64.bin: e ...

  4. C++Primer第五版——习题答案详解(三)

    习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第4章 表达式 练习4.10 while(cin>>i&&i ...

  5. 简单的知识图谱,neo4j+python

    因为研究方向是知识图谱,就有兴致想要构建一个简单的知识图谱,就在网上查找了一下,参考了neo4j搭建简单的金融知识图谱的思想,就着手从零开始构建. 1.首先就要考虑数据的获得,因为之前没有接触过爬虫之 ...

  6. 2017-2018-2 20165312 实验三《敏捷开发与XP实践》实验报告

    2017-2018-2 20165312 实验三<敏捷开发与XP实践>实验报告 一.实验内容 1.XP基础 极限编程(Extreme Programming,XP)是一种全新而快捷的软件开 ...

  7. react学习笔记(二)

    在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要将事件处理函数运行时的 this 指向当前组件实例. 绑定事件处理函数this的几种方法 ...

  8. java GC是在什么时候,对什么东西,做了什么事情

    面试题:“你能不能谈谈,java GC是在什么时候,对什么东西,做了什么事情?” 面试题目:地球人都知道,Java有个东西叫垃圾收集器,它让创建的对象不需要像c/cpp那样delete.free掉,你 ...

  9. Java并发编程三个性质:原子性、可见性、有序性

      并发编程 并发程序要正确地执行,必须要保证其具备原子性.可见性以及有序性:只要有一个没有被保证,就有可能会导致程序运行不正确  线程不安全在编译.测试甚至上线使用时,并不一定能发现,因为受到当时的 ...

  10. 使用Jmeter进行http接口测试(转载)

    原文:http://www.cnblogs.com/puresoul/p/4740436.html  前言: 本文主要针对http接口进行测试,使用Jmeter工具实现. Jmter工具设计之初是用于 ...