Django框架前后端通信打通实战(PyCharm高级版)

1.创建django项目并做好相关配置

首先在pycharm高级版中创建django项目

(1)选择左上角的四条小横线,然后找到文件下面的新建项目并点击,如下图:

(2)点击完上图的新建项目之后,来到下面的页面.  然后点击左上角的Django,然后设置文件的位置,之后将模版文件夹的template这个单词清空,最后在应用程序名称填上app,而后点击创建,django项目就创建完成了,剩下的就是在创建完成之后的一些配置了.

(3) 创建完成django之后,在app应用下一定要创建urls.py文件,用来写路由.

(4).在下面那个urls.py文件中写入如下代码:

"""login_hou URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('app/', include('app.urls')),
]

(5).之后要在settings.py文件中一般是第43行写上  'corsheaders' (如果你是社区版,你还需要另外写一行代码'app'),将50行 'django.middleware.csrf.CsrfViewMiddleware'注释掉(不注释的话,无法完成添加功能),在54行加上 'corsheaders.middleware.CorsMiddleware',在56行加上CORS_ORIGIN_ALLOW_ALL = True 这串代码,如下图所示   当然了,你在vscode中配置前后端连接的话就不用在后端配置第(4)步了

如果你在vscode中配置前后端连接,如下图,在 vue.config.js中如下配置:切记前后端口号要保持一致

(6). 配置数据库,将你提前创建好的数据库写到DATABASES中:

注意ENGING最后一个单词要改成mysql,NAME对应你数据库名字

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'login_di4zhou',
        'PASSWORD': 'root',
        'USER': 'root',
        'HOST': '127.0.0.1',
    }
}

(7).在app应用下找到models.py文件,写数据库所需字段,注意继承 Model:代码如下

from django.db import models


# Create your models here.

class Users(models.Model):
    name = models.CharField(max_length=64)
    pwd = models.IntegerField()


class People(models.Model):
    img = models.CharField(max_length=64)
    age = models.IntegerField(default=0)
    name = models.CharField(max_length=64)
    addr = models.CharField(max_length=64)
    sex = models.CharField(max_length=64)
    status = models.BooleanField(default=True)
    isdel = models.IntegerField(default=1)
    create_time = models.BigIntegerField(default=1715994190738)

上面我所写的代码, BigIntegerField 一般用来定义时间戳所用到,default是默认值

你所需要的字段全部定义完成之后需要先迁移表然后再生成表,代码依次在终端输入:

python manage.py makemigrations
 

python manage.py migrate   

记得小皮一定要提前启动嗷

然后你就会发现你的navicat中出现了你所需要的那些字段

(8).在views.py中写你的后端接口,下面我将展示一下我自己写的增,删,改,查,搜索,分页,批量删除,登录,的接口:

import json
import time

from django.db.models import Q
from django.http import JsonResponse
from django.shortcuts import render
from django.views import View

from app.models import *


# Create your views here.

class UsersView(View):
    # 登录
    def post(self, request):
        user_data = json.loads(request.body)
        try:
            user = Users.objects.get(name=user_data['name'], pwd=user_data['pwd'])
            return JsonResponse({
                'msg': '200',
                'data': {'name': user.name, 'pwd': user.pwd}
            })
        except:
            return JsonResponse({
                'msg': '400',

            })

    # 修改数据
    def put(self, request):
        new_people = json.loads(request.body)
        print(new_people)
        People.objects.filter(id=new_people['id']).update(
            name=new_people['name'],
            addr=new_people['addr'],
            sex=new_people['sex'],
            status=new_people['status'],
            age=new_people['age'],
            img=new_people['img'],
            create_time=new_people['create_time']

        )
        return JsonResponse({
            'msg': '200'
        })


class PeopleView(View):
    # 数据渲染
    def get(self, request):
        isdel = int(request.GET.get('isdel', 1))
        key = request.GET.get('key', '')
        min = request.GET.get('min', '')
        max = request.GET.get('max', '')
        s_time = int(request.GET.get('s_time', 0))
        e_time = int(request.GET.get('e_time', 0))
        people = People.objects.all().filter(isdel=isdel)
        # Q查询搜索
        q = Q()
        if key != '':
            q.add(('name__contains', key), 'AND')
        if min != '':
            q.add(('age__gte', min), 'AND')
        if max != '':
            q.add(('age__lte', max), 'AND')
        if s_time >0:
            q.add(('create_time__gte', s_time), 'AND')
        if e_time >0:
            q.add(('create_time__lte', e_time), 'AND')
        people = people.filter(q)
        print(people)
        # 分页
        page = int(request.GET.get('page', 1))
        pagesize = int(request.GET.get('pagesize', 2))
        peoples = people.count()
        start = (page - 1) * pagesize
        end = page * pagesize
        people = people[start:end]
        people_list = []
        for i in people:
            people_list.append({
                'id': i.id,
                'name': i.name,
                'addr': i.addr,
                'sex': i.sex,
                'status': i.status,
                'age': i.age,
                'img': i.img,
                'create_time': i.create_time
            })
        return JsonResponse({
            'data': people_list,
            'peoples': peoples
        })

    # 添加数据
    def post(self, request):
        new_people = json.loads(request.body)
        People.objects.create(
            name=new_people['name'],
            addr=new_people['addr'],
            sex=new_people['sex'],
            status=new_people['status'],
            age=new_people['age'],
            img=new_people['img'],
            create_time=int(time.time() * 1000)
        )
        return JsonResponse({
            'msg': '200'
        })

    # 状态修改
    def put(self, request):
        id = request.GET.get('id')
        people = People.objects.get(id=id)
        if people.status == True:
            people.status = False
        else:
            people.status = True
        people.save()
        return JsonResponse({
            'msg': '200'
        })

    # 单独删除/批量删除
    def delete(self, request):
        isdel = request.GET.get('isdel')
        ids = request.GET.get('id')
        id_list = ids.split(',')
        for id in id_list:
            people = People.objects.get(id=id)
            people.isdel = isdel
            people.save()
        return JsonResponse({
            'msg': '200'
        })

(9).在app应用下面的urls.py文件中定义路由,如下:

from django.urls import path,include

from app.views import *

urlpatterns = [
    path('UsersView/', UsersView.as_view()),
    path('PeopleView/', PeopleView.as_view()),

]

补充:pycharm有一个简单的运行命令,就不必每次在终端输入命令了:

首先点击这个小三角,点击它下面的编辑配置:

然后勾选自定义运行命令并填上runserver,端口号设置成前后端一样的,点击确定即可.

然后后端每次运行点击这个小三角就可以了:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/659368.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络智能化的发展对仿真环境的需求

1. 网络智能化背景介绍 1.1 什么是网络智能化 网络智能化是指利用人工智能(AI)、机器学习(ML)、优化算法等技术来实现网络的信息化、自动化和智能化。相对5G、6G、算力网络等领域,网络智能化是针对网络全场景、全要素…

通过花生壳对git服务器做内网穿透

很长一段时间内公司的git服务器只能够在公司内网访问,最近出差的同事比较多,通过外网访问git服务器的需求也迫在眉睫,于是选择了贝锐“花生壳”做内网穿透处理。 首先去贝锐官网购买花生壳映射,我选择的是个人标准版本&#xff0c…

AI绘画Stable Diffusion XL 可商用模型!写实艺术时尚摄影级真实感大模型推荐(附模型下载)

大家好,我是设计师阿威 大家在使用AI绘画的时候,是不是遇到这种问题:收藏的模型确实很多,可商用的没几个,而今天阿威将给大家带来的这款写实艺术时尚摄影级真实感大模型-墨幽人造人XL, 对于个人来讲完全是…

命运方舟 失落的方舟台服下载教程+账号注册教程(图文全攻略)

命运方舟 失落的方舟台服下载教程账号注册教程(图文全攻略) 失落的方舟,作为今年一款备受瞩目的MMORPG类型游戏,在官宣的时候就收获了一波不小的热度。这款游戏由游戏开发商Smile gate开发,游戏本体搭建于知名的虚幻引擎之上,为玩…

【网络原理】HTTPS详解

一.HTTPS的相关基本概念 HTTPS:由于HTTP协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况. 可能会出现运营商劫持,黑客入侵等不利影响, 因此就引入了HTTPS,其本质上就是在HTTP协议的基础上,引入了一个加密层SSM.什么是运营商劫持? 例如我们要…

最新!!2024上半年软考【高级】系统分析师 综合知识真题解析

2024上半年软考考试已经结束了,为大家整理了网友回忆版的系统分析师选择题真题及答案,总共30道题。 上半年考试的宝子们可以对答案预估分数!准备下半年考的宝子可以提前把握考试知识点和出题方向,说不定会遇到相同考点的题目&…

2024.5.20 学习记录

1、react 原理(jsx的本质、事件机制原理、setState和batch Update、组件渲染更新和diff算法、fiber) 2、代码随想录贪心刷题

使用递归形式以及迭代形式实现树的前中后序遍历

相信大家对于二叉树的遍历并不陌生,对于二叉树的递归遍历我们也可以信手拈来。但是如果让我们将二叉树修改成为非递归的形式呢?是不是有点疑惑了?那么本次博客我们就来梳理一下二叉树的非递归遍历。 由于递归遍历二叉树的代码以及逻辑都很简单…

Android Context 详解

一、什么是Context? Context是一个抽象基类。在翻译为上下文,是提供一些程序的运行环境基础信息。 Context下有两个子类,ContextWrapper是上下文功能的封装类(起到方法传递的作用,主要实现还是ContextImpl&#xff0…

操作系统实验三 可变分区内存分配首次适应算法模拟

实验三 可变分区内存分配首次适应算法模拟 实验内容 模拟内存分配,了解并掌握动态分区分配中所用的数据结构、分区分配算法,深刻理解首次适应内存分配算法。 模拟实现可变分区内存分配首次适应算法;空闲分区表要求有空闲块的起始地址、大小…

6.2 Go 切片(Slice)

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

惠海半导体 30V-60V-100V-150VMOS管 打火机、加湿器NMOS管 高耐压

MOS管的工作原理 MOS管,即金属-氧化物-半导体场效应晶体管,是一种重要的电子元件,在电路中起着关键的作用。其工作原理主要基于半导体材料的特性以及电场对电荷的控制。 首先,MOS管的基本结构包括源极、栅极和漏极。其中&#xf…

JUC框架(Future CompletableFuture详解)

文章目录 FutureFuture介绍Future原理Future代码示例 CompletableFutureCompletableFuture特点应用场景方法特性方法刨析supplyAsync/runAsyncthenApply / thenApplyAsync异步回调thenAccept / thenRunexceptionallywhenCompletehandle 实现场景 更多相关内容可查看 Future Fu…

实操专区-第15周-课堂练习专区-漏斗图与金字塔图

实操专区-第15周-课堂练习专区-漏斗图 下载安装ECharts,完成如下样式图形。 代码和截图上传 基本要求:下图3选1,完成代码和截图 完成 3.1.3.16 漏斗图中的任务点 基本要求:2个选一个完成,多做1个加2分。 请用班级学号姓…

有趣的css - 列表块加载动效

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是用 css 打造一个极简的列表块加载动效。 最新文章通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整…

Linux shell命令

cat 文件名 查看文件内容, tac文件名 倒着显示。 more 文件名 显示内容 less文件名 和more的功能一样,按上下左右键,按Q键结束。 head文件名,只显示前10行内容。 ln是一个默认创建硬链接的命令 ln 文件名 ls -i文件名…

【每日力扣】300. 最长递增子序列 与 139. 单词拆分

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害 300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&…

JEPaaS 低代码平台 accessToTeanantInfo SQL注入漏洞复现

0x01 产品简介 JEPaaS低代码开发平台开源版 旨在帮助企业快速实现信息化和数字化转型。该平台基于可视化开发环境,让软件开发人员和业务用户通过直观的可视化界面来构建应用程序 ,而不是传统的编写代码方式。 用户可以在开发平台灵活各个图形化控件,以构建业务流程、逻辑和…

Linux基础学习笔记

目录 1、Linux安装 1.1 安装教程 1.2 Linux目录结构 2、Linux常用命令 2.1 ls 2.2 命令分类 2.3 目录处理命令 2.4 操作文件命令 2.5 查找文件命令 2.6 ln链接命令 2.7 进程相关命令 ​编辑3、配置网络 3.1 关闭windows防火墙 3.2 配置好虚拟机的局域网 3.3 配置…

电焰灶:引领未来厨房烹饪革命,创“灶”家庭幸福感和安全感

随着科技的飞速发展,厨房灶具也迎来了前所未有的革新。电焰灶,这一新型的灶具,正以其独特的优势,逐渐取代传统的燃气灶和电磁炉,开启了一场灶具的新时代。它以其方便、节能的特点,让烹饪变得更加轻松高效&a…