web开发——4.一个完整的web项目和子应用程序的创建以及数据模型操作的两种方法
2018-01-08 21:11
661 查看
一、创建一个完整的web项目
1.在pycharm命令行中输入命令: django-admin startproject myweb,即可创建一个新的web项目
新的web项目包含如下文件结构:各个文件分别有如下作用:
|-- myweb/ # 项目文件夹[根目录] |-- myweb/ # 根项目(主项目) |-- __init__.py # 模块文件 |-- urls.py # 路由文件[url地址和处理函数进行对应] |-- settings.py # 项目的设置配置文件 |-- wsgi.py # 实现了wsgi网关协议的模块 |-- manage.py # 项目的命令管理模块[不需要修改,直接使用] |
2.在新的web项目下,使用命令:django-admin startapp myblog 为创建的项目创建一个名称为myblog的子应用程序。
该子模块创建之后,整个项目结构如下:3.myweb为根项目,myblog为子应用程序,两者并列.
(1).在根项目myweb中,创建第一个view视图,views.py文件
在views.py文件中,引入HttpResponse模块,定义一个index函数,在浏览器中访问项目时返回return的数据。
from django.http import HttpResponse
def index(request):
return HttpResponse(“这个是根项目首页,也可作为门户网站的首页”)
(2).在子应用程序myblog中,创建子应用程序的第一个view视图,默认子应用程序已存在views.py文件。
4.在根项目和子应用程序中都已经创建了各自的视图,用于访问时向页面输出数据,但是怎么区分浏览器访问的是根项目还是子应用程序呢?此时就是路由发挥作用的时候了,一般情况下,在urls.py文件中,根据正则表达式,用于筛选匹配浏览器中url对应的数据,以此来区分要访问的是主路由还是子路由,由此决定向页面展示的是根项目中的视图还是子应用程序的视图。若每个子应用程序或者根项目中的views.py文件中定义了多个函数,也就是说在视图中定义不同的函数,展示不同的页面,要展示哪个页面也是在各自的路由urls.py文件中决定的。
(1).在主路由中,要向匹配主项目也就根项目中的视图,需要先引入视图,然后利用正则表达式,依次匹配views.py文件中不同的函数。
(2)在myblog子应用程序中,新建一个urls.py文件
5.除了在主路由中配置include,在根项目中的settings.py配置文件中的INSTALLED_APPS中将子应用程序名称加入列表。此配置是为了使子应用程序中的数据模型models.py可以由根项目来管理。
6.在浏览器中输入localhost:8000/index即可访问到根项目中的视图,返回对应的数据“这个是根项目的首页,也可作为门户网站的首页”,以此可访问根项目中的登录和子应用程序的视图都可访问到。
二. 程序模型—数据库同步
1. Django 项目连接 mysql 数据库
Django 项目要操作数据库,首先要和数据库建立连接,才能让程序中的数据和数据库关联 起来进行数据的增删改查操作
Django项目默认使用mysqldb模块进行和mysql数据库之间的交互操作,但是mysqldb 模块对于 python3.4 以上的版本支持还不够完善,所以我们要使用替代方案 :通过 pymysql 模块完成和数据库之间的交互过程
Django 连接 mysql 数据库的操作,是通过根模块的配置实现的,在项目根模块的配置文件 settings.py 中,我们可以查询到如下默认配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
DATABASES 配置:用于进行数据库连接信息的配置 ENGINE:用于特定的数据库引擎的配置,一般选项如下
django.db.backends.sqlite3
django.db.backends.postgresql
django.db.backends.mysql
django.db.backends.oracle
NAME:要连接的数据库名称的配置
USER:配置连接数据库的用户账号
PASSWORD:配置连接数据库的登录密码
HOST:配置数据库所在的主机 IP 地址
PORT:配置连接数据库的端口号
CHARSET:配置连接数据库交互数据编码格式
配置和 mysql 数据库的连接信息如下:
# 1.引入需要的模块
import pymysql
# 2.转换数据库支持
pymysql.install_as_MySQLdb()
#3.配置DATABASES字典
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'py_db',
'USER': 'root',
'PASSWORD': '', # 配置为空表示无密码
'HOST': '', # 配置为空表示连接的是当前 PC
'PORT': '3306' } }
如此~Django 和数据库之间的连接关系就建立了
三、子项目中数据模型的增删改查操作
1.将对象的操作封装在类型中 修改模型定义类,创建一个静态的对象创建方法2.将对象的操作封装在类型中 修改模型定义类,创建一个静态的对象创建方法
from django.db import models
class Author(models.Models):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
@classmethod def create(cls, name):
author = cls(name = name)
return author
重新定义 views.py 中的处理函数
from django.http import HttpResponse
from . import models
def create_author(request):
author = models.Author.create("tom") author.save()
return HttpResponse("save ok! ")
3.通过使用 Django 提供的对象管理器 Manager,给每个模型类创建一个管理类 如作者类型 Author 的数据管理类为 AuthorManager,这也是符合面向对象开发思想的 一种开发方式,不同的类型负责不同的功能,互相协作完成整个功能
重新定义模型类型如下:
from django.db import models
class AuthorManager(models.Manager):
def create_author(self, name):
author = self.create(name = name)
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
author_manager = AuthorManager()
重新定义视图处理函数如下:
from django.http import HttpResponse
from . import models
def create(request):
author = models.Author.author_manager.create_author("jerry")
return HttpResponse("save ok!")
可以看出来,第二种方式对第一种方式又进行了深层的封装操作
6. 查询操作
查询数据的操作一般都是数据操作中比较复杂的一部分,针对不同的操作方式进行分类讲解 为了方便进行快速的操作,我们通过 Django 提供的一个 shell 测试命令行进行处理
进入项目文件夹,运行如下命令进入项目测试命令行 python manage.py shell
6.1. 查询多条数据
all()查询全部数据 filter([condition])查询指定条件数据,如果没有指定条件,等同于 all() exclude([condition])查询指定条件之外的数据,如果没有指定条件,等同于 all()
order_by()根据指定的字段进行排序查询,字段前面添加符号'-'表示倒序 values()将查询到的数据转换成字典,保存在列表中返回 >>> from myblog.models import Author
>>> a = Author.author_manage
>>> a.all() <QuerySet [<Author: 1--tom>, <Author: 2--jerry>]> >>> a.filter(name="tom") <QuerySet [<Author: 1--tom>]> >>> a.exclude(name="tom") <QuerySet [<Author: 2--jerry>]> >>> a.order_by("id") <QuerySet [<Author: 1--tom>, <Author: 2--jerry>]> >>> a.order_by("-id")
<QuerySet [<Author: 2--jerry>, <Author: 1--tom>]> >>> a.values() <QuerySet [{'id': 1, 'name': 'tom'}, {'id': 2, 'name': 'jerry'}]>
6.2. 查询单条数据
get([condition])查询指定条件的数据,返回 0条或者多条都会出现异常 count()返回查询到的结果的总数 first()返回查询到的第一条数据 last()返回查询到的最后一条数据 exists()判断查询结果中是否包含数据 >>> a.get(name="tom") <Author: 1--tom> >>> a.count() 2 >>> a.first() <Author: 1--tom> >>> a.last() <Author: 2--jerry> >>> a.exists()
True
6.3. 条件查询
相等条件查询 key=value 包含条件查询 key__contains=value:模糊查询 like
author:大牧莫邪
开头结尾查询 key__startswith=value key__endswith=value 是否为空查询 key__isnull=True key__isnotnull=True 范围查询 key__in=[1,2,3,4,5,6,7] 关系查询 key__gt=1 大于 1 grant than key__gte=1 大于等于 1 grant than or equals key__lt=1 小于 1 key__lte=1 小于等于 1 日期查询[year/month/day/week_day/hour/minute/second]
key__year=2017
相关文章推荐
- iOS彩票项目--第七天,初次读取json数据、KVC转模型技巧、运行时字典转模型以及初步对显示网页的操作并且跟踪标签
- 用新建scaffold的方法 创建一个带CRUD增删改查操作的 小WEB项目
- eclipse maven创建一个maven web项目,以及创建过程中的报错解决方法
- Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
- 通过eclipse方法来操作Hadoop集群上cassandra数据库(包括创建Keyspace对象以及往数据库写入数据)
- 使用Apworks开发基于CQRS架构的应用程序(二):创建领域模型项目
- 两种添加数据到WEB DropDownList 控件的方法
- 数据表的创建以及操作.三
- 在IIS中用Web应用程序项目创建子与项目
- Silverlight 3中如何创建Linq to SQL项目实现MS-SQL数据的操作
- Visual Studio .NET 无法创建或打开应用程序。问题很可能是因为本地WEB本地服务器上没有安装所需的组件。请运行Visual Studio .NET安装程序并添加WEB开发组件
- 终于在visual studio.net 2005 找到了创建 XML Web services 的项目的方法
- “Visual Studio .NET 无法创建或打开应用程序。问题很可能是因为本地WEB本地服务器上没有安装所需的组件。请运行Visual Studio .NET安装程序并添加WEB开发组件“的一种解决方案
- 两种添加数据到WEB DropDownList 控件的方法
- 两种添加数据到WEB DropDownList 控件的方法
- 3-(初学)oracle10g创建对数据表操作的几种方法
- U6数据导出工具项目总结二 两种常见的DataGridView输出到EXCEL方法
- 两种添加数据到WEB DropDownList 控件的方法
- 多数据之间的连接操作-集中几个.NET常用的方法(不完整)
- 多数据之间的连接操作-集中几个.NET常用的方法(不完整)