一、静态文件配置

  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. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_03.jdbc操作数据库的问题分析

    分析一段代码,传统的jdbc的功能,最终要实现的功能就是sql语句.

  2. 中国MOOC_零基础学Java语言_第5周 数组

    第5周 数组 5.1 数组 5.2 数组计算 public class Main { public static void main(String[] args) { for (int i = 1; ...

  3. ARTS-0

    ARTS的初衷 Algorithm:主要是为了编程训练和学习.每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard).进行编程训练,如果不训练你看再多的算法 ...

  4. 【ABAP系列】SAP Web Dynpro 技术简介

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP Web Dynpro 技 ...

  5. python下对mysql数据库的链接操作

    参考网址: https://blog.csdn.net/guofeng93/article/details/53994112 https://blog.csdn.net/Chen_Eris/artic ...

  6. java虚拟机学习总结之GC回收算法与GC收集器

    GC回收算法 1.标记清除算法分为标记阶段和清除阶段标记阶段:通过特定的判断方式找出无用的对象实例并将其标记清除阶段:将已标记的对象所占用的内存回收缺点:运行多次以后容易产生空间碎片,当需要一整段连续 ...

  7. C++中对象的构造顺序

    1,C++ 中的类可以定义多个对象,那么对象构造顺序是怎样的? 1,很多的 bug 是由对象的构造顺序造成的,虽然它不难: 2,对象的构造往往和构造函数牵涉在一起,构造函数的函数体又可能由非常复杂的程 ...

  8. [LeetCode] 82. 删除排序链表中的重复元素 II

    题目链接 : https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/ 题目描述: 给定一个排序链表,删除所有含有 ...

  9. Java8与JDK8和JDK1.8有什么区别?

    JDK版本与发行时间 版本 名称 发行日期 JDK 1.0 Oak(橡树) 1996-01-23 JDK 1.1 none(无) 1997-02-19 JDK 1.1.4 Sparkler(宝石) 1 ...

  10. python 序列解包(解压缩)

    序列解包(解压缩) 所学的解压缩 如果我们给出一个列表,我们需要一次性取出多个值,我们是不是可以用下面的方式实现呢? name_list = ['nick', 'egon', 'jason'] x = ...