如何搭建网站(二)——Django的具体操作

在这里插入图片描述
这篇文章并没有把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

欢迎关注公众号:追求极简主义的程序媛。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值