一、静态文件配置

  1. 默认情况下所有的html文件都放在templates文件夹内

  2. 什么是静态文件

    网站所使用的提前写好的css、JS、第三方前端模块、图片都叫静态资源文件。

  3. 默认情况下网站所用到的静态文件资源全部会放在static文件夹下,通常情况下在static文件夹内部还会创建其他文件夹。

    static文件夹下的文件集有

    在Django中需要自己手动创建静态文件存放的文件夹。

    在创建好文件夹后需要在settings文件内进行如下配置:

    如果不进行static的配置,浏览器是无法访问static文件夹的里的资源的,另外访问必须具体到文件夹里的某一个页面,不能只访问文件夹。

    在进行静态文件访问测试的时候我们需要将浏览器的network设置为disabled cache(禁止浏览器使用缓存)如下图是Google浏览器的设置方法:

  4. 关于url中的接口前缀和settings配置的static的关系

    第一个static是接口前缀,必须和url的接口前缀保持一致,第二个static是静态资源文件夹。

    在我们的html文件中导入框架和jQuery时也要加上接口前缀(如果使用的cdn则不用)。

  5. 多个静态资源文件夹的查找顺序是从上往下一个文件一个文件查找。

    !

  6. 静态页面的动态绑定

    当我们修改urls的路径时,html的框架中的接口前缀也需要修改,如果html文件非常多修改起来就很麻烦了,为了解决这个问题我们需要将html的静态文件进行动态绑定。

    绑定程序如下:

    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
    <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>

二、关于form表单的补充

form表单默认是get请求,get请求携带数据的方式:

http://127.0.0.1:8000/login/?username=zgh&password=123
特点:url?xxx=xxx&yyy=yyy

特点:

1.携带数据不安全

2.携带的数据大小有限制

3.通常只会携带一些不重要的数据

form表单的action填写要求:

1.不写,默认朝向当前的地址提交

2.只写后缀则朝本站的后缀地址提交

3.写全路径可以向其他路径提交网站提交

三、post请求出现403问题

Django中,前期我们朝后端提交post请求时会出现403的问题,需要在配置文件中注释掉一行代码如下:

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

四、request方法初识

4.1判断当前请求方式

Django后端的视图函数默认是get请求,无论是get请求还是post请求都会执行视图函数

def XXX(request):#XXX是请求的页面后缀
return render(****)

使用request.method可以拿到的大写的字符串类型的请求方式GET、POST,

这样我们就可以根据请求方式的不同进行进一步的操作。

4.2request.POST与request.GET

request.POST获取用户提交的post请求数据:

我们可以将request.POST内的数据看做一个字典,字典内的value是一个个的列表,request.POST.get()获取列表中的最后一个元素,request.POST.getlist()获取用户提交的整个列表。

print(request.POST)  # <QueryDict: {'username': ['zgh'], 'password': ['123']}> 你直接看成一个字典即可
username = request.POST.get('username') # zgh <class 'str'>
password = request.POST.get('password') # 123 <class 'str'>

request.GET获取用户提交的get请求的数据,与request.POST相同request.GET也有get和getlist方法,取值方式和获取的数据类型和request.POST完全相同。

这里需要说明POST请求也可以通过request.GET的方式拿到url中?后面的数据。

五、pycharm连接数据库

找到pycharm的database栏按下图步骤进行操作

选择好我们需要的数据库后会进入下面的界面

将pycharm中修改后的表写入数据库可通过下图进行

设置完成后我们的pycharm就是数据库的客户端了,但是这时Django还需要对数据库的进一步配置才能使用这个数据库。

Django默认自带一个小型数据库sqlite(仅做测试使用,对日期格式不兼容),这里我们使用Django连接主流数据库MySQL。

首先我们需要在Django的配置文件settings.py文件中的DATABASES项进行如下配置:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test1',
'USER':'root',
'PASSWORD':'123agh',
'HOST':'127.0.0.1',
'PORT':3306,
'CHARSET':'utf8'
}
}#这里使用的mysql数据库

然后需要配置Django连接MySQL的模块,如果我们不配置的话Django会报错让装MySQLdb,但是这里我们使用pymysql,具体配置:在Django项目名下或者应用名下的__init__.py中书写

import pymysql
pymysql.install_as_MySQLdb()

到这里我们的Django和MySQL数据库之间的连接配置已经做好了。

六、Django orm简介

关于orm(对象关系映射)的简要讲解可以参考本人之前的博客orm,这里直接介绍Django中orm的的使用方法。

6.1模型表的创建

模型表的创建在每个应用的models文件内进行具体创建方式如下:

class User(models.Model):
# id int auto_increment primary key 主键id字段
# id = models.AutoField(primary_key=True) # django当你不指定主键的时候
# 会自动帮你创建一个名id字段 并且作为主键
# 如果你自己制定了 django就不会再帮你创
# username varchar(32) django中默认没有char字段 但是支持用户自定义
username = models.CharField(max_length=255) # CharField必须要指定max_length参数
# password int
password = models.CharField(max_length=32)
# 方式1 设置默认值
# email = models.EmailField(default='123@qq.com') # varchar
# # 方式2 允许字段为空
# phone = models.BigIntegerField(null=True)
# # 直接在提示中给默认值
# gender = models.CharField(max_length=32)

这里需要说明的有一下几点:

1.模型表类需要继承models.Model类

2.主键id字段如果我们不手动创建的话Django会自动创建以个名为“id”的字段作为该表的主键id

3.如果我们自定义主键id,那么主键id的名称我们可以自定义

4.这里的charField是varchar数据类型,这里没有char字段但是用户可以自定义,charField必须要指定max_length参数

5.字段允许为空但必须要设置默认值,否则pycharm会提示让你创建默认值

6.定义好模型表类后需要执行数据库迁移命令才能在数据库中将表创建出来

6.2数据库迁移命令

数据库迁移命令主要功能是生成数据库表的创建与改动记录,将对表的创建与修改同步到数据库中。

要完成上面两个功能需要pycharm的terminal中键入下面两行代码:

python3 manage.py makemigrations
python3 manage.py migrate

第一行命令记录对数据库的修改,第二行命令同步修改到数据库,这里需要注意的地方:每对数据库修改一次都必须执行这两行命令,否者修改无效,执行顺序必须是先执行第一行再执行第二行。

6.3模型表的增删改查

6.3.1字段的增删改查

字段的增删改查直接在模型表类中进行,即直接对模型表类的字段进行增删改查,然后执行数据迁移命令即可。这里需要说明的是数据库字段的删除(包括注释表中已有的字段)一定要慎重,特别是一定不要注释字段,否则数据迁移命令后数据库中对应的字段就被删除了。

6.3.2模型表数据的增删改查

  1. 查找记录

    data = models.User.objects.filter(username=username)  # <QuerySet [<User: User object>]>

    filter返回的是一个“列表”,里面才是真正的数据对象,filter括号内可以放多个关键字参数,这多个关键字参数是与(and)的关系。

  2. 增加记录

    user_obj = models.User.objects.create(username=username,password=password)

    create方法有一个返回值 ,返回值就是当前被创建的对象本身。

  3. 修改记录

   models.User.objects.filter(id=edit_id).update(username=username,password=password)

这是一个批量操作,会将filter查询出来的列表中所有的对象全部更新。

  1. 删除记录
   models.User.objects.filter(id=delete_id).delete()

这也是一个批量操作,会将filter查询出来的列表中所有的对象全部删除。

初识Django之前端后端与数据库的配置的更多相关文章

  1. python后端从数据库请求数据给到前端的具体实现

    先来贴一窜代码让大家理解前端/后端/数据库的工作原理, 首先简要说明:前端向后端请求数据,后端根据前端请求数据的类别分析其需求,并连接到数据库获取相应数据: 来一段简单的实例代码模拟淘宝商城: 前端代 ...

  2. python基于django编写api+前端后端分离

    有用 https://segmentfault.com/a/1190000016049962#articleHeader2 python的前后端分离(一):django+原生js实现get请求 htt ...

  3. web框架之初识Django

    目录 一.web框架 1.1什么是web框架 1.2自制的简易web框架 1.3三大主流web框架简介 Django Flask Tornado 1.4动态网页与静态网页 二.初识Django框架 2 ...

  4. 初识 Django

    HTTP协议 HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则. HTTP就是一个通信规则,通信规则规定 ...

  5. Django+MySQL Dashboard 网页端数据库可视化

    1. Overview Python+MySQL+Django, 有些数据托管在 MySQL 的数据库,然后我们希望进行可视化,通过 web 的方式对数据库的信息去进行展示/检索/维护/.. 这个项目 ...

  6. nginx+vue+uwsgi+django的前后端分离项目部署

    Vue+Django前后端分离项目部署,nginx默认端口80,数据提交监听端口9000,反向代理(uwsgi配置)端口9999 1.下载项目文件(统一在/opt/luffyproject目录) (1 ...

  7. 使用Docker跑MySQL 作为Django的存储后端

    Docker的好处不科普了,用过的都说好. 不想污染自己开发机器上的文件环境,本萌新使用Docker运行Mysql,Redis来作为Django的存储后端和缓存. 在第一次安装过程中,我遇到了一些问题 ...

  8. 解决Django+Vue前后端分离的跨域问题及关闭csrf验证

      前后端分离难免要接触到跨域问题,跨域的相关知识请参:跨域问题,解决之道   在Django和Vue前后端分离的时候也会遇到跨域的问题,因为刚刚接触Django还不太了解,今天花了好长的时间,查阅了 ...

  9. python的Web框架:初识Django

    web应用程序 本质 socket服务端 浏览器本质是一个socket客户端 1. 服务器程序 socket请求 接受HTTP请求,发送HTTP响应. 比较底层,繁琐,有专用的服务器软件,如:Apac ...

随机推荐

  1. python学习笔记:(八)条件语句

    if语句,python中if语句的一般形式如下: conditon1为真,执行statement_block_1 condition1为假,判断conition_2,如果condition_2为真,执 ...

  2. 数据科学家人才危机现象,是FOMO还是Silver?

    数据科学家人才危机现象,是FOMO还是Silver? 数据科学家的人才短缺和薪水高涨已经达到了顶板,未来还会持续下去吗? 在过去几年中,高级分析(#大数据#分析)空间一直经历着严重的FOMO(害怕错过 ...

  3. 中国MOOC_零基础学Java语言_期末考试的编程题_1二进制的前导的零

    期末考试的编程题 返回   这是期末考试的编程题,在60分钟内,你可以多次提交,直到正确为止. 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止 ...

  4. Mysql数据库存储数据时间与系统获取时间不一致

    最近进行项目开发,发现存在数据库内的数据和系统查询到的数据相差8小时 发现有2种比较合适的方法 (一)修改mysql服务的区时 centos进入mysql查看/修改时区 1.输入以下命令进入mysql ...

  5. JavaScript —— 实现简单计算器【带有 开/关机 清零 退格 功能】

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  6. 各种CNN模型

    Resnet: model_urls = { 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', 'res ...

  7. 【Qt开发】QT中显示图像数据

    一般图像数据都是以RGBRGBRGB--字节流的方式(解码完成后的原始图像流),我说成字节流,那就表明R,G,B的值各占一个字节,在编程时表示的就是unsigned char * data. 我们先来 ...

  8. Square HDU 1518 搜索

    Square HDU 1518 搜索 题意 原题链接 给你一定若干个木棒,让你使用它们组成一个四边形,要求这些木棒必须全部使用. 解题思路 木棒有多种组合方式,使用搜索来进行寻找,这里需要进行优化,不 ...

  9. Centos7防火墙开启3306端口

    CentOS7的默认防火墙为firewall,且默认是不打开的. systemctl start firewalld # 启动friewall systemctl status firewalld # ...

  10. 数学: HDU1098 Ignatius's puzzle

    Ignatius's puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...