这篇文章并没有把django框架所以内容都呈现出来,只是写了一些我自己在完成网站创建时候遇到的一些问题和思路,也是对网上一些教程的补充和思考。
例如:
-
数据库的配置这部分一般为两种。一种是利用已经存在的数据库进行配置(根据数据库生成模型文件(models.py)),另一种创建新的数据库进行配置(是个逆向过程,根据模型文件生成数据库)。而在实际应用当中,这两种情况我们都需要用到。
-
还有数据库设置远程连接,数据库的相关操作问题,等等。
下面将分为三个部分介绍:
1.基础架构搭建
2.数据库配置和操作
3.最终的总框架
一、基础架构搭建:
1 新建项目文件夹
可以任意取你喜欢的名字,我的叫做:MY_DJANGO
2 搭建虚拟环境
养成好的习惯,在开始进行一个项目的时候要创建一个虚拟环境
wry@wry-virtual-machine:~/my_django$ python3 -m venv myvenv
wry@wry-virtual-machine:~/my_django$ source myvenv/bin/activate
3 安装Django
方法一:可以直接用命令行一个安装
pip install django==1.8
方法二:可以新建一个requirements.txt文件,把要安装的包都放在里面, 最后用如下命令(pip选用国内的源)
pip install -r requirements.txt - i https://mirrors.aliyun.com/pypi/simple/
4 生成一个django项目
运行:
django-admin startproject mysite .
运行之后会出现如下架构,至此基本架构搭好:
MY_DJANGO
├───manage.py
└───mysite
settings.py
urls.py
wsgi.py
__init__.py
它是一个Django的项目文件夹,为即将开始的项目准备好了必要的资源文件和文件夹
5 更改设置
在mysite/settings.py中进行更改
1.TIME_ZONE ="Asia/Shanghai"
2.STATIC_ROOT = os.path.join(BASE_DIR, 'static')
6 数据库设置
这里我是用我自带的mysql数据库,如果想要重新创建一个sqlite的同学,可以直接使用settings.py的默认配置:
DATABASES = {
'default': {
'ENGINE':'django.db.backends.mysql',
'NAME':'django_web',
'USER':'root',
'PASSWORD':'******',
'HOST':'192.168. xx. xx',(你的数据库所在的主机名,局域网内ip,或者是公网ip,这里可能涉及到,数据库的远程访问问题)
'PORT':'3306',
}
}
mysql数据库远程访问问题参考:https://blog.csdn.net/nly19900820/article/details/98206414
要看的你本地的mysql的版本,是8.0之前还是8.0之后
7 生成你的自定义项目
这里我生成my_app,大家可以任意修改项目名 运行
python3 manage.py startapp my_app
项目架构现在变成这样咯:
MY_DJANGO
├── mysite
| __init__.py
| settings.py
| urls.py
| wsgi.py
├── manage.py
└── my_app
├── migrations
| __init__.py
├── __init__.py
├── admin.py
├── models.py
├── tests.py
├── views.py
8 配置新项目设置
要在settings.py中installed_app中添加一个:my_app
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'my_app',
)
二、关于数据库操作
1 配置:
1 利用已存在的数据库
可参考博文:
https://blog.csdn.net/weixin_30429201/article/details/98137107
https://www.jianshu.com/p/037bd7e20a7a
通过你之前在本地生成的数据库,生成models(根据数据库,生成models)
1 在mysite文件夹下__init__文件,加入
import pymysql
pymysql.install_as_MySQLdb()
2 python manage.py inspectdb> my_app/models.py(迁移到应用程序中)
3 对于自己需要的models,如果需要以后进行增删改查,需要在meta中设置managed=True
4 数据库迁移(–fake-initial,因为数据库已经存在,不带–fake会报错)
python manage.py makemigrations
python manage.py migrate --fake-initial
5 blog/admin.py中把models注册进去
2 使用新的数据库
由models生成数据库,是前者的逆向过程
1 创建一个模型
我创建了两个对象,用户信息,以及游戏数据,这对应于数据库的两张表:userinfo和game_info_test。
其中用户信息(userinfo)是继承了User表的模块(可以django的增加用户认证)
在mysite/settings.py中填写:
class UserInfo(AbstractUser):
age = models.IntegerField(blank=True, null=True)
detail = models.CharField(max_length=700, blank=True, null=True)
class Meta:
managed=True
db_table ='userinfo'
class GameInfoTest(models.Model):
quick = models.DecimalField(max_digits=65, decimal_places=2, blank=True, null=True)
average = models.DecimalField(max_digits=65, decimal_places=2, blank=True, null=True)
score = models.IntegerField(blank=True, null=True)
game_time = models.DecimalField(max_digits=65, decimal_places=2, blank=True, null=True)
l_time=models.DecimalField(max_digits=65, decimal_places=2, blank=True, null=True)
r_time=models.DecimalField(max_digits=65, decimal_places=2, blank=True, null=True)
date = models.DateField(blank=True, null=True)
k = models.ForeignKey('UserInfo', models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = True
db_table = 'game_info_test'
2 根据models.py文件创建数据库(让数据库包含里面的内容)
#首先让django知道我们在模型(我们刚刚创建的)有一些变更
1. python manage.py makemigrations blog
#其次将进行迁移
2. python manage.py migrate blog
2 查询和更改
数据库ORM和查询集(QuerySet)
什么是ORM?
全称是Object Relational Mapping(对象关系映射)。
简单来说,就是在编程过程中,把面向对象的概念跟数据库中的表的概念对应起来。
举例,我在models.py定义了一个对象,如userinfo(用户信息),那么就对应着数据库里面的一张表,而这个对象的具体实例(年龄(57),性别(女)等),对应着表中的某个记录(57,女)。
QuerySet API:是Django提供给我们的,通过ORM技术管理数据库的一组接口。
QuerySet:允许您从数据库中读取数据,对其进行筛选以及排序。
概念太过抽象了,还是直接实战比较好。
1.首先可以运行 python manage.py shell (打开django的交互式控制台)
(InteractiveConsole)
>>>
2.导入模型
from my_app.models import JointMeasureTest,GameInfoTest,UserInfo
3.一些常用查询的命令(不具体解释了,就是干)
关于关联查询(一对多,多表查询如果不太理解的话) 可以参考博文:
https://blog.csdn.net/houyanhua1/article/details/84953388?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
GameInfoTest.objects.all()
GameInfoTest.objects.all().values_list('quick ','id')
JointMeasureTest.objects.filter(id=1)
JointMeasureTest.objects.filter(id=1).values('quick')
#跨关系查询(非常重要)
#其中k是GameInfoTest的外键,和userinfo的主键id对应关系是多对一,所以通过如下形式的查询,可以将这两张表联系起来
GameInfoTest.objects.filter(k__username='xiaowang').values('date_j')
#求最大值(Max,Sum),并排序
from django.db.models.aggregates import Max,Min,Sum
GameInfoTest.objects.filter(j__username='wry').values('date_j').aggregate(Sum('score'),Avg('average')).order_by('date'):不可以分组
GameInfoTest.objects.filter(j__username='wry').values('date_j').annotate(Avg('average')).order_by('date') :可以分组
<QuerySet [{'average': Decimal('2.00'), 'date_j': datetime.date(2020, 4, 1)}]>
#添加用户(用密文),也可以直接在数据库中添加记录
UserInfo.objects.create_user(username='xiaohong',password='xxxxxxxx')
总框架
关于 urls: urls.py
什么是url?url是网页地址,每一个互联网的网页都需要自己的url。这样当用户打开一个url时候,你的应用程序才知道展示什么内容。在Django,我们使用一种叫做URLconfig(URL配置)的机制,可以用它来把URL匹配成相应的View。
关于视图:views.py
views是存放你逻辑的地方,也是主要程序的所在地,是连接模型(models.py)和模板(template)的关键。
关于管理:admin.py
关于模板和静态文件:template , static
涉及到html,css,javascript的前端知识 本人不是很感兴趣,天生对艺术设计不感冒,更喜欢偏逻辑的知识,所以这部分知识,留到未来填坑 至此架构差不多搭好了,如下:
MY_DJANGO
├── mysite
| __init__.py
| settings.py #包含网站的配置数据,时间,数据库,static等配置
| urls.py
| wsgi.py
├── manage.py #帮助管理站点的脚本,我们能够在我们的计算机上启动一个web服务器
└── my_app
├── migrations
| __init__.py
├── __init__.py
├── admin.py
├── models.py
├── tests.py
├── views.py
├── templates
my_app
index.html
├── static
css
js
欢迎关注公众号:追求极简主义的程序媛。