基于Pycharm和Django模型技术的数据迁移

news2024/12/22 20:52:24

1.配置数据库

在trip_server/settings.py中修改配置:

其格式可访问官网:Settings | Django documentation | Django

1.1 配置数据库

文件地址:trip_server/settings.py

配置前需要创建(NaviCat)个人数据库

"ENGINE": "django.db.backends.mysql"  #数据库驱动

"NAME": "trip_django1" #库名(自设)

"USER": "root"  #登录数据库用户名

"PASSWORD": "888888"  #登录数据库密码(自设)

"HOST": "localhost"  #数据库的ip地址

"PORT": "3306"  #数据库端口号,允许穿过防火墙(默认)

DATABASES = {
    #默认连接的数据库
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "trip_django1",
        "USER": "root",
        "PASSWORD": "888888",
        "HOST": "localhost",
        "PORT": "3306",
    }
}

1.2 引入数据库依赖

文件地址:trip_server/settings.py

from pathlib import Path
#引入数据库依赖
import pymysql
pymysql.install_as_MySQLdb()

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

2.新建system模块并建立模型

2.1 在终端中建表

python manage.py startapp system

2.2 建立模型

文件地址:system/models.py

from django.db import models
# Create your models here.
#数据库中表的映射类,根据该文件构建及操作数据库
class Slider(models.Model):
    "轮播图"
    name = models.CharField('名称',max_length=32)
    desc = models.CharField('描述',max_length=100, null=True, blank=True)
    types = models.SmallIntegerField("展现的位置",default=10)
    img = models.ImageField('图片地址',max_length=255, upload_to='%Y%m/slider')
    reorder = models.SmallIntegerField('排序字段',default=0,help_text="数字越大越靠前")
    start_time = models.DateTimeField('生效开始时间',null=True, blank=True)
    end_time = models.DateTimeField('生效结束的时间',null=True, blank=True)
    target_url = models.CharField('跳转的地址',max_length=255, null=True, blank=True)
    is_valid = models.BooleanField('是否有效',default=True)
    created_at = models.DateTimeField('创建时间',auto_now_add=True)
    updated_at = models.DateTimeField('修改时间',auto_now=True)
class Meta:
    db_table = 'system_slider'
    ordering = ['-reorder']#默认排序规则

2.3 配置system模块

文件地址:trip_server/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #Here👇
    'system.apps.SystemConfig',
    #Here👆
]

2.4 在数据库中创新列表

在NaviCat中创建mysql表格。

 

2.5 检查运行

python manage.py check

python manage.py makemigrations

python manage.py migrate 

 2.6 配置视图函数

文件地址:system/views.py

创建视图函数,用于返回轮播数据列表【def】

queryset = Slider.objects.filter(is_valid=True):

对数据源(数据库里的数据)进行过滤,相当于在sql语句中加where条件

for item in queryset:

对结果集进行遍历,将数据封装至objects中

return http.JsonResponse(data):

返回一个json格式的对象,json是标准的网络传输数据的格式

return HttpResponse(data)

from django import http
from django.shortcuts import render
from system.models import Slider

# Create your views here.
def slider_list(request):
    #规范响应数据结构
    data = {
        'meta':{

        },
        'objects':[]
    }
    queryset = Slider.objects.filter(is_valid=True)
    for item in queryset:
        data['objects'].append({
            'id': item.id,
            'img_url': item.img.url,
            'target_url': item.target_url,
            'name': item.name
        })
    return http.JsonResponse(data)

2.7 暴露地址

该文件用于暴露视图函数的链接地址

path配置具体的函数地址:

参数1:自定义访问地址;

参数2:访问视图函数的位置;

参数3:链接名字。

from django.urls import path
from system import views
#配置访问地址列表
urlpatterns= [
    path('slider/list/',views.slider_list,name='slider_list')
]

2.8 定义项目的URL路由

将路径'system/'映射到system应用的URL配置。

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    #here~👇
    path('system/', include('system.urls')),
    #here~👆
]

3.设计景点ORM模型

终于联动网页了(*硬撑)

 python manage.py startapp sight

3.1 景点模块数据准备

文件地址:sight/models.py

from django.db import models

# Create your models here.
class Sight(models.Model):
    """ 景点基础信息 """
    name = models.CharField('名称', max_length=64)
    desc = models.CharField('描述', max_length=256)
    main_img = models.ImageField('主图', upload_to='%Y%m/sight/', max_length=256)
    banner_img = models.ImageField('详情主图', upload_to='%Y%m/sight/', max_length=256)
    content = models.TextField('详细')
    score = models.FloatField('评分', default=5)
    min_price = models.FloatField('最低价格', default=0)
    province = models.CharField('省份', max_length=32)
    city = models.CharField('市区', max_length=32)
    area = models.CharField('区/县', max_length=32, null=True)
    town = models.CharField('乡镇', max_length=32, null=True)

    is_top = models.BooleanField('是否为精选景点', default=False)
    is_hot = models.BooleanField('是否为热门景点', default=False)

    is_valid = models.BooleanField('是否有效', default=True)
    created_at = models.DateTimeField('创建时间', auto_now_add=True)
    updated_at = models.DateTimeField('修改时间', auto_now=True)

    class Meta:
        db_table ='sight'
        ordering = ['-updated_at']

 3.2 配置system模块

文件地址:settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'system.apps.SystemConfig',
    #Here👇
    'sight.apps.SightConfig'
    #Here👆
]

 3.3 检查运行

python manage.py check

python manage.py makemigrations

python manage.py migrate 

在NaviCat中刷新后可看到,新创建了的“sight”:

 

3.4 配置视图函数

文件地址:sight/views.py

class SightListView(ListView):#该类用于查询景点列表信息

paginate_by = 5:#初始每页放5条数据

def get_queryset(self): #根据条件查询数据

query = Q(is_valid=True)  #重写查询方法:1. Q查询条件:该对象可以拼接多个条件 2. is_valid=True:表中is_valid列,有值则被查询出来

----------------><----------------

def render_to_response(self, context, **response_kwargs):

def render_to_response:用于响应数据;

context类的上下文对象:

记录类的属性列表,其中包含了ListView子类SightList的所有属性及数据

page_obj = context['page_obj']:#利用上下文对象获取页面信息

from django.shortcuts import render
from django import http
from django.db.models import Q
from django.views.generic import ListView
from sight.models import Sight

# Create your views here.
class SightListView(ListView):
    paginate_by = 5
    def get_queryset(self):
        query = Q(is_valid=True)
        #1.获得热门景点
        is_hot = self.request.GET.get('is_hot',None)
        if is_hot:
            query = query & Q(is_hot=True)
        #2.获得精选景点
        is_top = self.request.GET.get('is_top',None)
        if is_top:
            query = query & Q(is_top=True)
        #3.景点名称搜索
        queryset = Sight.objects.filter(query)
        return queryset

    def render_to_response(self, context, **response_kwargs):
        page_obj = context['page_obj']
        #合成响应数据
        data = {
            'meta':{
                'total_count':page_obj.paginator.count,
                'page_count':page_obj.paginator.num_pages,
                'current_page':page_obj.number,
            },
            'objects':[],
        }
        for item in page_obj.object_list:
            data['objects'].append({
                'id':item.id,
                'name':item.name,
                'main_img':item.main_img.url,
                'min_price':item.min_price,
                'score':item.score,
                'province':item.province,
                'city':item.city,
                'comment_count':0
            })
        return http.JsonResponse(data)

3.5 暴露地址

文件地址:sight/urls.py

from django.urls import path
from sight import views

urlpatterns = [
    path('/sight/list/', views.SightListView.as_view(), name='sight_list')
]

3.6 定义项目的URL路由 

文件地址:trip_server/urls.py

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('system/', include('system.urls')),
    #here~👇
    path('sight',include('sight.urls')),
    #here~👆
]

3.7 运行

端口号:http://localhost:8000/

4.Apifox

3.1 新建项目:

3.2 新建目录

3.3 填写端口号

3.4 输出结果

参数名可调,如page页数等;参数值1,即第1页。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux命令行的艺术

文章目录 前言基础日常使用文件及数据处理系统调试单行脚本冷门但有用仅限 OS X 系统仅限 Windows 系统在 Windows 下获取 Unix 工具实用 Windows 命令行工具Cygwin 技巧 更多资源免责声明 熟练使用命令行是一种常常被忽视&#xff0c;或被认为难以掌握的技能&#xff0c;但实际…

C++学习路线(数据库部分)四

表的插入 插入数据记录是常见的数据操作&#xff0c;可以显示向表中增加的新的数据记录。在MySQL中可以通过“INSERT INTO”语句来实现插入数据记录&#xff0c;该SQL语句可以通过如下4种方式使用&#xff1a;插入完整数据记录、插入部分数据记录、插入多条数据记录和插入JSON…

供应商图纸外发:如何做到既安全又高效?

供应商跟合作伙伴、客户之间会涉及到图纸外发的场景&#xff0c;这是一个涉及数据安全、效率及合规性的重要环节。供应商图纸发送流程一般如下&#xff1a; 1.申请与审批 采购人员根据需要提出发放图纸的申请并提交审批&#xff1b; 采购部负责人审批发放申请&#xff0c;确…

代码随想录之链表刷题总结

目录 1.链表理论基础 2.移除链表元素 3.设计链表 4.翻转链表 5.两两交换链表中的节点 6.删除链表中的第N个节点 7.链表相交 8.环形链表 1.链表理论基础 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域…

Notepad++ 插件安装,The plugin package is not found问题

问题&#xff1a; 今天想用自己电脑的Notepad来分析一下几个json文件&#xff0c;后续工作传输都使用json通信&#xff0c;公司装了jsonView插件都没什么问题。自己电脑装了就问题百出&#xff1a; 本人版本&#xff1a; 揣测1&#xff1a; 是不是管理员权限的问题&#xff0c;…

【操作系统】每日 3 题(三)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12820365.html &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果…

【万兴科技-注册_登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

duilib 进阶 之 TileListBox 列表

目录 一、TileListBox 1、样式 1)、整体列表分列设置 2)、列表项样式设置 3)、选中后出现√号,horver时 出现边框色 的实例 2、代码 1)、普通动态添加列表项 2)、列表项样式中有自定义控件时 3)、获得选中项 一、TileListBox Tile [taɪl] ,瓦片 棋子 Ti…

专线物流公共服务平台:数据驱动,标准引领,共创金融双赢新时代

专线物流公共服务平台&#xff1a;数据驱动&#xff0c;标准引领&#xff0c;共创金融双赢新时代 在当今这个数据驱动、标准引领、金融赋能的经济发展新时代&#xff0c;专线物流作为商贸流通领域的重要一环&#xff0c;正面临着前所未有的机遇与挑战。为应对复杂多变的市场环…

日本Harmonic行星减速机HPG系列 薄壁弹性齿轮技术实现低背隙控制

科技飞速发展&#xff0c;工业领域对于设备的精度和刚性要求越来越高。日本Harmonic Drive Systems 公司凭借其在精密传动领域的深厚积累与不断创新&#xff0c;成功开发出一款具有高精度、高刚性的伺服电机用行星减速机 ——HPG系列&#xff0c;为众多行业带来了全新的精密传动…

win10系统cad2007安装提示缺少net framework 3.5安装错误怎么修复

浏览器地址栏输入www.dnz9.com远程解决netframework问题 由于AutoCAD 2007是一款比较老的软件&#xff0c;它可能与最新的Windows操作系统存在兼容性问题。所以我们在安装的cad2007的时候会提示“未安装net缺少该组件时不能安装”。在Windows 10上安装AutoCAD 2007时遇到缺少.N…

Flash的语音ic型号有哪些?

深圳唯创知音电子有限公司在语音技术领域具有深厚的积累&#xff0c;其Flash语音IC产品凭借高性能和广泛的应用领域&#xff0c;在市场上占据了一席之地。以下是对该公司Flash语音IC产品的详细介绍&#xff1a; 一、产品概述 Flash语音IC是一种采用Flash存储技术的语音芯片&…

我在命令行下学日语

同一个动作重复 300 遍&#xff0c;肌肉就会有记忆&#xff0c;重复 600 遍&#xff0c;脊柱就会有记忆&#xff0c;学完五十音图不熟练&#xff0c;经常遗忘或者要好几秒才想得起来一个怎么办&#xff1f;没关系&#xff0c;我做了个命令行下的小游戏 KanaQuiz 来帮助你记忆&a…

【GESP】C++三级练习BCQM3091,选择题判定

GESP三级字符串string和一级知识点if-else分支语句练习&#xff0c;非常基础&#xff0c;对于我孩子来说练习重点在一级部分&#xff0c;字符串只是碰巧遇到了。 题目题解详见&#xff1a;https://www.coderli.com/gesp-3-bcqm3091/ 【GESP】C三级练习BCQM3091&#xff0c;选…

Vue前端开发:事件绑定方式

事件定义 在Vue中&#xff0c;当一个元素通过使用v-on或语法糖指令绑定某个事件后&#xff0c;则完成了事件被定义的过程&#xff0c;在这定义的过程中&#xff0c;指令的后面是定义事件的名称&#xff0c;等号的后面是事件被触发后执行的函数&#xff0c;当然&#xff0c;也可…

PHP + Windows小皮面板 + VScode 安装教程

目录 1. 小皮面板安装包 下载 2、配置MySQL 可以在cmd命令框中使用 3. VScode安装 如有错误&#xff0c;烦请批评指正 1. 小皮面板安装包 下载 官方地址https://old.xp.cn/download.html 下载完后&#xff0c;一路next&#xff0c;文件路径自定义 2、配置MySQL 可以在cm…

【小白学机器学习29】 概率统计与图形 ( hist, bar, pie , box ,scatter ,line)

目录 1 频度/次数 1.1 频度统计表&#xff1a;频度分布表 1.2 频数分布图直方图 histogram / hist 1.3 对比&#xff0c;柱状图 bar graph /column chart 2 饼图 pie chart 2.1饼图特点 3 南丁格尔玫瑰图 4 茎叶图 stem-and-leaf display 5 箱型图 box plot 6 …

ssm基于web的素材网的设计与实现+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 摘要 I Abstract II 1绪论 1 1.1研究背景与意义 1 1.1.1研究背景 1 1.1.2研究意义 1 1.2国内外研究…

QT 跨平台优势独特,效果实例设计精彩呈现

QT 的跨平台优势确实独特而显著。它能够在不同的操作系统上实现一致的用户体验&#xff0c;无论是 Windows、Linux 还是 macOS。在效果实例设计中&#xff0c;QT 可以展现出精美的界面和流畅的交互。比如&#xff0c;一个基于 QT 开发的图形设计软件&#xff0c;在各个平台上都…

GXYCTF2019:gakki

把题目给的附件解压后给了张图片&#xff0c;顺带着瞟一眼属性&#xff0c;没有值得注意的 binwalk检测一手&#xff0c;看见有个rar压缩包 提取出来的压缩包是有密码的&#xff0c;但是题目并没有给出获取密码的途径&#xff0c;所以先爆破试试&#xff0c;用最常用的四位数爆…