首页 > 其他分享 >Django框架入门必会三板斧,Django静态文件 static,Django有两种静态文件, Django框架入门之request对象,Django框架入门之ORM操作

Django框架入门必会三板斧,Django静态文件 static,Django有两种静态文件, Django框架入门之request对象,Django框架入门之ORM操作

时间:2024-06-18 19:22:43浏览次数:11  
标签:文件 入门 框架 静态 request django static Django

Ⅰ Django框架入门必会三板斧

【一】Django项目如何添加新功能

  • 启动django项目之后 如何添加更多的功能
  • 回想自己编写的web框架 如果要添加功能 就去urls.py和views.py

【1】添加URL映射

  • 在项目的 urls.py 文件中,通过导入相应的应用(app)及其视图函数,并使用 path() 或 include() 函数来定义 URL 映射规则。
  • 例如,如果要在名为 "myapp" 的应用中添加一个用于显示博客文章列表的 URL,则可以在 urlpatterns 中添加如下配置
from django.urls import path
from . import views

urlpatterns = [
    path('blog/', views.blog_list, name='blog_list'),
]
  • 这将把 "/blog/" 映射到 views.blog_list 视图函数。

【2】添加视图函数

  • 然后,在对应的 "myapp/views.py" 文件中,创建视图函数以处理 HTTP 请求。
  • 例如,blog_list 可能如下实现:
from django.shortcuts import render
from .models import BlogPost

def blog_list(request):
    posts = BlogPost.objects.all()
    return render(request, 'myapp/blog_list.html', {'posts': posts})
  • 这里假设有一个名为 "BlogPost" 的模型,并有一个包含模板 blog_list.html 的对应 HTML 模板文件。

【二】三板斧(返回HTTP响应、渲染HTML和重定向)

【1】HttpResponse

  • HttpResponse: 这是 Django 自带的类,用于构建基本的 HTTP 响应。
  • 例如,当需要返回纯文本或 JSON 数据时,可以这样创建响应:
from django.http import HttpResponse

def index(request):
    # 字符串形式的数据渲染到页面上还是字符串
    data = "hello world"
    # hello world
    
    # 字典格式的数据通过 HttpResponse 返回给前端页面显示的内容就是当前键
    data = {"username": "silence", "password": "666"}
    # usernamepassword
    return HttpResponse(data)

【2】render

  • 主要用于返回html文件 并且支持模板语法(django自己写的)
  • render(): 这个函数用于从给定的模板加载内容,并将其插入到 HTTP 响应中作为 HTML 内容发送给客户端。
  • 例如,在上面的 blog_list 视图中,我们使用了它来返回带有博客文章列表的 HTML:
from django.shortcuts import render

def index(request):
    # 前端模版文件一定要放在当前 app 下的 templates 目录下
    # render(必传 request,前端文件名 "login.html")
    # locals() : 局部名称空间 将当前参数传递给前端的 html 页面
    # html 页面通过 模版语法{{}} 使用变量
    user_data = {"username": "silence", "password": "666"}
    return render(request, "login.html", locals())
<h1>登陆页面</h1>

<h2>1111</h2>
<h2>222</h2>
<h1>前端模版语法</h1>
<!-- {{ user_data }}   {"username": "silence", "password": "666"} --> 

【3】redirect

  • 主要用于重定向 括号内可以写其他网站的全称 也可以自己网站的后缀
  • redirect(): 该函数用于向用户返回一个 HTTP "Redirect" 响应,使浏览器跳转至指定的 URL。
def index(request):
    # redirect : 重定向路由请求地址 状态 3xx
    # 左侧 / :代表的是从根目录开始找路由
    # login : 路由映射

    # 根目录 http://127.0.0.1:8000

    # 将访问到指定路由的请求进行转发重定向至新的地址
    return redirect(to="/login/")

# http://localhost:8000 被重定向为 http://localhost:8000/login/

【4】补充django 自带了重启功能

  • ctrl + s 保存 保存以后会自动发生重启
  • 对于前端页面来说 前端是浏览器负责渲染的 所以 修改前端页面的时候不需要重启 Django 直接刷新即可

Ⅱ Django静态文件 static

【一】静态文件配置说明

【1】模版文件

  • 我们将html文件默认都放在templates文件夹下

【2】资源文件

  • 我们将网站所使用的静态文件默认都放在static文件夹下
静态文件:前段已经写好,能直接使用的文件
	网站写好的JS文件
	网站写好的CSS文件
	网站用到的图片文件
	第三方框架
	...
拿来直接就可以使用的文件
  • 一般情况我们再static文件夹下还会对文件进行划分
    • js文件夹
    • css文件夹
    • img文件夹
    • plugins文件夹
  • 在浏览器中输入url能够看到对应的资源
  • 是因为后端提前开设了相关的接口
  • 如果访问不到资源,说明后端没有开设相关资源的端口

【3】Django静态文件结构树

  • 静态文件夹 都叫 static
  • css 文件夹 存储 css样式 静态文件
  • js 文件夹 存储 js动作 静态文件
  • font 文件夹 存储 字体 静态文件
  • plugins 文件夹 存储 插件 静态文件

【二】静态文件配置

【1】配置文件增加配置

  • static文件夹跟manage.py一级 如果放在引入发app文件夹下不用再配置文件中配置 可以直接使用,若是放在外面需要在settings.py 配置文件中增加如下配置

(1)后端

  • settings.py 配置文件中增加如下配置
# /static/  ---> 从根路径下开始找 static 路径
STATIC_URL = '/static/'  # 类似于访问静态文件的令牌

# 静态文件配置
# 默认查找位置是当前APP的目录下
# 这个配置定义了静态文件应用在启用 FileSystemFinder 查找器时将穿越的额外位置
STATICFILES_DIRS  = [
    os.path.join(BASE_DIR, 'static')
]

(2)前端

  • 在前端页面中增加如下配置,即可使用静态文件模版语法
{% load static %}   # 一般放在代码最上面<!DOCTYPE html>上面
<script src="{% static 'js/jquery.min.js' %}"></script>

【2】配置文件说明

  • 如果想要访问static静态文件,就必须以static开头
    • 如:/static/js/bootstrap.min.js

【3】总结步骤

# 【1】在页面上想要使用 jQuery文件
# (1)cdn链接引入
#     <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
# (2)引入本地文件 --- 不能用
#  <script src="jquery.min.js"></script>
# 发现页面上的js时间不生效
# 打开开发开发者模式 ---> 网络 (Network)
# 请求 url : http://127.0.0.1:8000/login/jquery.min.js
# 状态码 404 not found 资源不存在
# (3)静态文件加载
# [1]方式一
# <script src="../../static/jquery.min.js"></script>
# 请求 url :http://127.0.0.1:8000/static/jquery.min.js
# 404 Not Found
# [2]前提是必须加载 static 才能使用
# {% load static %}
# <script src="{% static 'js/jquery.min.js' %}"></script>
# 请求 url :http://127.0.0.1:8000/static/jquery.min.js
# 404 Not Found
# [3]没有配置静态文件目录
# STATICFILES_DIRS = [
#     os.path.join(BASE_DIR, 'static')
# ]
# 有了静态文件目录配置后你就发现能够使用了


# 总结  使用 static 静态文件的步骤
# 【1】确定你的 地址
# STATIC_URL = '/static/'
# 【2】确定你确实有一个 static 文件夹
# (1)将 static 文件夹放在当前APP目录下
# Django项目在加载环境变量的时候 因为你已经注册了 app 能够找到 app 目录下
# 如果放到和根目录同级的目录下 因为Django的权限原因 加载不到除当前APP以外的区域
# 放到 app 里面正常用
# 放到 app 外边就用不了了
# (2)创建一个参数项 STATICFILES_DIRS
"""
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
"""
# 【3】在前端使用静态文件
# (1)在整个文档的最上面 加载 static 文件夹
# {% load static %}
# (2)在指定得 标签上使用静态文件
# a href
# img src
# script src
# link href
# background-img : url("{% static "地址" %}")
# 【4】内部的原理
# 因为你已经配置了 STATIC_URL
# 可以找到 以 http://127.0.0.1:8899/static/ ...
# 访问静态文件的时候可以挨个检索资源目录 默认的资源目录就是app下的目录
# 将当前资源自动转换为制定的地址发起请求 http://127.0.0.1:8899/static/ ...

# 【5】将当前APP的view源码文件放在了 static 目录下
# 数据泄露 --> 大家都能看到你写的后端的源码
# 在别的公司还真发生过

【三】静态文件配置补充

【1】前缀

  • 如果你想用一个额外的命名空间来引用其中一个位置的文件,你可以 可选的 提供一个前缀作为 (prefix, path) 的元组
  • 例如:
STATICFILES_DIRS = [
    # ...
    ("downloads", "/opt/webfiles/stats"),
]
  • 例如,假设你将 STATIC_URL 设置为 '/static/',则 collectstatic 管理命令将收集 STATIC_ROOT 的 'downloads' 子目录中的“stats”文件。
  • 这将允许你在你的模板中用 '/static/downloads/polls_20101022.tar.gz' 引用本地文件 '/opt/webfiles/stats/polls_20101022.tar.gz',例如:
<a href="{% static 'downloads/polls_20101022.tar.gz' %}">

【2】存储引擎

  • 默认: 'django.contrib.staticfiles.storage.StaticFilesStorage'
class StaticFilesStorage(FileSystemStorage):
    """
    Standard file system storage for static files.

    The defaults for ``location`` and ``base_url`` are
    ``STATIC_ROOT`` and ``STATIC_URL``.
    """
    def __init__(self, location=None, base_url=None, *args, **kwargs):
        if location is None:
            location = settings.STATIC_ROOT
        if base_url is None:
            base_url = settings.STATIC_URL
        check_settings(base_url)
        super().__init__(location, base_url, *args, **kwargs)
        # FileSystemStorage fallbacks to MEDIA_ROOT when location
        # is empty, so we restore the empty value.
        if not location:
            self.base_location = None
            self.location = None

    def path(self, name):
        if not self.location:
            raise ImproperlyConfigured("You're using the staticfiles app "
                                       "without having set the STATIC_ROOT "
                                       "setting to a filesystem path.")
        return super().path(name)
  • 使用 collectstatic 管理命令收集静态文件时要使用的文件存储引擎。
  • 在此配置中定义的存储后端的即用实例可以在 django.contrib.staticfiles.storage.staticfiles_storage 中找到。
  • 默认情况下,将查找存储在 STATICFILES_DIRS 配置中的文件(使用 django.contrib.staticfiles.finders.FileSystemFinder)和每个应用程序的 static 子目录中的文件(使用 django.contrib.staticfiles.finders.AppDirectoriesFinder)。如果存在多个同名文件,将使用第一个找到的文件。
  • 有一个查找器是默认禁用的: django.contrib.staticfiles.finders.DefaultStorageFinder。如果添加到你的 STATICFILES_FINDERS 配置中,它将在 DEFAULT_FILE_STORAGE 配置所定义的默认文件存储中查找静态文件。

【四】示例

【1】引言

  • 以登录注册功能为例
  • 我们之所以可以在浏览器地址栏中输入不同的路由访问到不同的资源
  • 是因为我们在后端框架中提前开设了相应的访问接口所以用户才能访问
  • 言外之意就是我们没有开设接口 那么肯定访问不到

【2】解决方案

(1)开始登陆页面接口

  • 开设接口返回登录界面

(2)登录页面渲染静态文件

  • 登录界面需要使用bootstrap并且还需要自己编写css和js
    • 这些文件就被称之为静态文件

(3)前端获取用户数据

  • 页面需要获取前端用户数据并且传递给后端
    • form表单
      • action参数:控制数据的提交地址
      • method参数:控制请求的提交方式

(4)访问登录页面

(5)开设静态资源接口

  • 理论上应该自己去路由层开设接口资源 但是由于静态文件资源使用频率很高
  • 只要是一个web项目都肯定需要
  • 所以django为了避免开发者繁琐
  • 提供了静态资源的配置文件
  • 只需要填写固定的配置即可开设资源接口
# 静态文件资源访问接口固定配置
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
# html页面路径
  /static/mycss.css

Ⅲ Django有两种静态文件

【1】static

  • 称为静态文件夹,是不变的,形成网站的核心部件
  • 如 CSS文件,JS文件,背景图片等
  • 可为Templates模板提供支持

【2】media

  • 称为媒体文件夹,是变动的,由用户定义的文件
  • 如 用户头像, 用户上传的图片或视频等;
  • 可为富文本编辑器mdeditor提供支持

【一】前言

  • 我要做的是个人博客,不提供其他人注册登录功能,故media只是为了存放文章的封面、图片等信息。
  • 故在目录方面,我的设置如下:
  • static目录与Templates目录放在一起,由“主题目录接管”
  • 主题目录:与manage.py同级目录下创建templates目录,目录下创建主题文件夹,如default,里面创建templates和static静态文件夹
  • 如果想更换主题,只需创建新主题文件夹,变动templates和static即可
  • media目录放在根目录,毕竟我的“主题”无论怎么换,博客文章内容不会换,涉及的本地图片不会变动

【二】配置说明(static)

【1】引入

  • http://127.0.0.1:8000/static-files/
  • Django的静态文件处理一般分debug模式和非debug模式
  • debug模式的情况下允许访问静态资源,无需STATIC_ROOT
  • 非debug模式也就是生产模式,在服务器运行时, 静态资源需要使用nginx或者apache之类的工具维护

【2】配置解释

  • STATIC_URL - 可以理解为通过url访问static文件的路径
    • 如 项目路径是:{{projectName}}/static/common_static/test.css
    • 则访问url是:http://IP:PORT/static/common_static/test.css
  • STATIC_ROOT - 可以理解为你打算在服务器上存储static文件的路径(通过 python manage.py collectstatic命令)
    • collectstatic命令后将复制静态文件到STATIC_ROOT指定的目录中,
    • 部署django项目的时候需要
  • STATICFILES_DIRS - 可以理解为配置Django寻找静态文件时首先去STATICFILES_DIRS里面寻找, 其次再到各个app的static文件夹里面找
    • Django查找静态文件是惰性查找
    • 查找到第一个,就停止查找了
  • django放置静态文件有两种方式
    • 一是在每个app里新建一个static目录,将静态文件放置其中;
    • 另一种是对公共文件的处理,如jQuery bootstrap等,这时就需要配置 STATICFILES_DIRS。

【三】配置文件修改(static)

【1】debug模式

  • 确定主题目录/templates/default/,创建static文件夹
# debug模式在settings中进行设置

# 对外提供WEB访问时的URL地址
STATIC_URL = '/static/'
# 开发阶段放置项目自己的静态文件,不能包含STATIC_ROOT路径
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'templates', THEME, 'static'),
]

【2】非debug模式

# 在`settings.py`同级的`urls.py`内还需要把`STATIC_URL`和django的url连接起来
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns += staticfiles_urlpatterns()
# 非debug模式在settings中进行设置,需要修改

STATIC_URL = '/static/'

# 执行collectstatic命令后会将项目中的静态文件(包括STATICFILES_DIRS、自带admin的静态文件)收集到该目录下面来(所以不应该在该目录下面放置自己的一些静态文件,因为会覆盖掉)
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'collect_static'),
)

【3】模板中使用静态文件

  • {%load static%}和{%load staticfiles%}:哪个是首选?
  • Django2.x之后废弃{%load staticfiles%}语法
{% load static %}

<img src="{% static "my_app/example.jpg" %}" alt="My image"/>

【4】全局配置

  • 模板中使用静态文件,无需load static,配置全局使用load static
  • TEMPLATES加入'builtins': ['django.templatetags.static']
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates', THEME, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        'builtins': ['django.templatetags.static']
        },
    },
]

【四】配置文件说明(media)

  • MEDIA_ROOT - 设置用户上传文件的实际保存目录,该文件夹自动创建
  • MEDIA_URL - 代表用户通过URL来访问这个本地地址的URL
    • 如 本机MEDIA_URL 为/media/
    • 则访问url是:http://IP:PORT/media/

【五】配置文件修改(media)

【1】配置文件注册

# 在根目录下的 settings.py 中添加如下配置


MEDIA_URL='/media/'
MEDIA_ROOT=os.path.join(BASE_DIR,"media")

【2】路由映射

# 导入项目文件夹中settings.py模块
# 或者 from . import settings
from django.conf import settings         
                                         
# 导入相关静态文件处理的views控制包
from django.views.static import serve    


urlpatterns = [
    re_path('media/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}),
]

【3】模型文件配置

  • FileField或ImageField字段适用于存储文件/图片
  • 出于性能考虑,文件并不直接保存到数据库,而是保存在文件系统里,因此该字段只是记录一个路径而已。
img_link = models.ImageField(upload_to='images/%Y-%m', max_length=255,
                                 help_text='提示:不添加封面可以不选择图片,默认没有图片',
                                 blank=True, null=True, verbose_name='文章封面')
                                 
# upload_to相当于上传到/media/images目录下,格式为year-month,如2019-10


avatar = models.FileField(verbose_name='头像', upload_to='upload/avatar/')

# upload_to相当于上传到/media/upload/avatar/目录下

【4】模版文件使用

(1)方式一

<img src="/media/{{ article.img_link }}">

(2)方式二

<img src="{{ article.img_link.url }}">

Ⅳ Django框架入门之request对象

【一】request对象引入

【1】提交GET请求

(1)前端

  • form表单中action属性,不写默认是当前路由地址
  • form表单中的method属性,不写默认是GET请求
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>注册页面</h1>

{#form表单#}
<form action="" method="get">
    {#  action : 用来定义数据提交的路径的 不写 是默认当前请求地址 写了 指定的请求地址  #}
    {#  method : get 提交 get请求  post 提交 post 请求 #}
    <p>
        <label for="usernameInput">username : </label>
        <input type="text" id="usernameInput" name="username">
    </p>
    <p>
        <label for="passwordInput">password : </label>
        <input type="text" id="passwordInput" name="password">
    </p>
    <p>
        <label for="passwordInput">hobby : </label>
        music <input type="checkbox" id="passwordInput" name="hobby" value="music">
        listen <input type="checkbox" id="passwordInput" name="hobby" value="listen">
        running <input type="checkbox" id="passwordInput" name="hobby" value="running">
    </p>
    <p>
        <input type="submit">
    </p>
</form>

</body>
</html>

(2)后端

  • user/views.py
from django.shortcuts import render, HttpResponse, redirect

def register(request):
    '''
    前端发送数据给后端  --- 通过 form 表单
    后端取出来做校验
    :param request:
    :return:
    '''
# 第一次 GET 请求是你访问页面在地址栏回车的那个请求 ---> render 渲染了你的注册页面
# 第二次 GET 请求发生在你点击提交的时候,向后端提交数据
# print(request.method)
    
    # 从请求中获取对应的数据  
    print(request.method)
   
    # 通过 request.GET
    # 从GET请求中获取数
    print(request.GET)
 
   # <QueryDict: {'username': ['silence'], 'password': ['741'], 'hobby': ['music', 'listen']}>

    # 从GET请求中获取数据
    username = request.GET.get("username")
    password = request.GET.get("password")
    # hobby = request.GET.get("hobby")
    # silence 741 listen
    hobby = request.GET.getlist("hobby")
    # silence 741 ['music', 'listen']
    print(username, password, hobby)

    return render(request, "register.html")
  • urls.py
from django.contrib import admin
from django.urls import path
from user.views import index, login,register

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),
    path('login/', login),
    path('register/', register),
]

(3)总结

# 查看 get 请求数据是通过 request.GET
# 获取数据的方式 request.GET.get("key") ---> 获取单一键值时候的方式
# 获取数据的方式 request.GET.getlist("key") ---> 获取一个键对应多个值时候的方式

【2】提交POST请求

# POST 请求 发生错误 无法访问 CSRF verification failed. Request aborted.
# csrf 验证失败 ---> 注释掉一个中间件 ---> 取消了 csrf 验证

(1)前端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>注册页面</h1>

{#form表单#}
<form action="" method="post">
    {#  action : 用来定义数据提交的路径的 不写 是默认当前请求地址 写了 指定的请求地址  #}
    {#  method : get 提交 get请求  post 提交 post 请求 #}
    <p>
        <label for="usernameInput">username : </label>
        <input type="text" id="usernameInput" name="username">
    </p>
    <p>
        <label for="passwordInput">password : </label>
        <input type="text" id="passwordInput" name="password">
    </p>
    <p>
        <label for="passwordInput">hobby : </label>
        music <input type="checkbox" id="passwordInput" name="hobby" value="music">
        listen <input type="checkbox" id="passwordInput" name="hobby" value="listen">
        running <input type="checkbox" id="passwordInput" name="hobby" value="running">
    </p>
    <p>
        <input type="submit">
    </p>
</form>

</body>
</html>

(2)后端

# POST请求获取数据
# print(request.method)
# 只有 post 请求才会走的方式
    
from django.shortcuts import render, HttpResponse, redirect  
   if request.method == "POST":
        # 通过 request.POST
        print(request.POST)
        # POST
        # <QueryDict: {'username': ['silence'], 'password': ['741'], 'hobby': ['music', 'listen']}>
        # 从POST请求中获取数据
        username = request.POST.get("username")
        password = request.POST.get("password")
        # hobby = request.POST.get("hobby")
        # silence 741 listen
        hobby = request.POST.getlist("hobby")
        # silence 741 ['music', 'listen']
        print(username, password, hobby)

    return render(request, "register.html")

(3)POST请求报错

  • 当前端form表单发送POST请求时,会报一个错,导致后端崩溃
Forbidden (403)
CSRF verification failed. Request aborted.

You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties.

If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for “same-origin” requests.

(4)解决办法

  • 将settings.py文件中的配置注释掉,在后面的学习中我们会逐步的解决掉这个问题
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对象属性和方法

【1】request.method

  • 获取发起请求的请求方式
  • get请求携带的数据是由大小限制的
  • post请求携带的请求参数没有限制

【2】request.POST

  • 获取用户输入的请求数据,但不包含文件
  • 返回的是:大写字符串

【3】get/getlist

  • get 只会获取列表最后一个元素
  • getlist 直接将列表取出(多选项)

Ⅴ Django框架入门之ORM操作

【一】配置数据库

【1】默认数据库

  • 在 settings.py 文件中有一个配置项就是配置数据库的
  • 但是Django默认的数据库是sqlite3数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

【2】指定数据库

  • 修改 settings.py 中的数据库配置项
  • 模版
# 链接MySQL数据库
DATABASES = {
    'default': {
        # 指定我们使用的引擎是 mysql 数据库的引擎
        'ENGINE': 'django.db.backends.mysql',
        # 我们需要配置MySQL数据库的参数
        # NAME 就是你要链接的数据库名字
        # 'NAME': BASE_DIR / 'db.sqlite3',

        # MySQL服务器的IP - HOST
        "HOST": "127.0.0.1",
        # MySQL服务器的PORT
        "PORT": 3306,
        # MySQL服务器的USERNAME
        "USER": "root",
        # MySQL服务器的PASSWORD
        "PASSWORD": "123456",
        # MySQL服务器的 数据库名字 NAME
        # create database django_day02;
        "NAME": "django_day02",
        # MySQL服务器的CHARSET
        "CHARSET": "utf8mb4"
    }
}

【3】指定MySQL数据库报错

# 【遇到报错】
# django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
# Did you install mysqlclient?
  • django 默认使用mysqldb模块链接mysql
  • 但是该模块的兼容性不好,需要手动修改为pymysql链接

(1)解决办法一:猴子补丁

  • 在项目下的 init 或者任意的应用名下的 init 文件中书写一下代码
import pymysql

pymysql.install_as_MySQLdb()

(2)解决办法二:下载第三方模块

  • 直接安装
pip install mysqlclient

(3)Win报错解决办法(下载whl文件)

  • 下载对应的whl版本文件
  • 安装(切换到指定目录下执行 pip 安装命令)
pip install pip mysqlclient-2.2.4-cp310-cp310-win_amd64.whl

(4)Mac报错解决办法

# 在MacOS上面安装 mysqlclient 100% 报错
# 解决方法也非常繁琐 ---> 需要安装很多东西 ---> 还是没安装上
# MacOS 选择打补丁

# 在MacOS上面装一个 windows 系统 ---> 安装一点问题没有

【pycharm链接数据库之下载数据库】

标签:文件,入门,框架,静态,request,django,static,Django
From: https://www.cnblogs.com/zyb123/p/18254965

相关文章

  • ClickHouse 入门基本介绍
    一、简介官网:clickhouse.techClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。OLAP:联机分析处理,以ClickHouse等分析型数据库为代表,适合对数据进行一次插入多......
  • 如何利用 Perl 高效地构建和维护复杂的 Web 应用程序,以及与当前主流的 Web 框架和技术
    Perl是一种通用的脚本语言,可用于构建和维护复杂的Web应用程序。以下是利用Perl高效构建和维护复杂的Web应用程序的一些建议:使用现代化的Web框架:Perl有一些流行的Web框架,例如Dancer、Mojolicious和Catalyst。这些框架提供了丰富的功能和工具,可以快速开发和......
  • 【接口自动化测试】第一节.接口自动化测试基础和框架介绍
    文章目录前言一、接口自动化基础   1.1接口自动化基础介绍   1.2接口自动化测试流程   1.3选取自动化测试用例   1.4搭建自动化测试环境二、接口自动化测试框架   2.1接口自动化框架设计思路   2.2定义项目目录结构总结前......
  • 计算机图形学入门13:纹理映射常见问题、MipMap
        上一章介绍了纹理映射,这一章介绍纹理映射常见的问题。1.纹理太小 1.1产生原因        例如要渲染一面墙,它的分辨率4K,但与它对应的纹理大小是256x256,这样要怎样?显然纹理会被拉大。当墙面上一个点去查询纹理时,可能查询到不准确的值,如下:        ......
  • 多租户的后台管理系统框架涉及到在不同租户之间隔离数据(字段隔离)------------升鲜宝供
    在多租户系统中,为了区分平台级用户和租户级用户,我们通常会使用一个特定的租户ID来表示平台级用户和角色。这种设计确保了平台级用户和角色能够被正确识别和管理,而不会与任何具体租户的用户和角色混淆。###设计方案1.**特定租户ID**:使用一个特定的租户ID(例如,`0`或`1`)来表......
  • 如何开发盲盒小程序APP——入门指南
    一、前言随着盲盒经济的兴起,越来越多的开发者开始关注如何开发盲盒小程序APP。盲盒小程序不仅能为用户提供新颖的购物体验,还能为商家带来可观的利润。本文将为大家介绍如何入门开发盲盒小程序APP。二、需求分析目标用户:明确你的目标用户群体,如年轻人、潮流追随者等。功能需......
  • springboot 集成shiro框架
    目录一、Shiro简介二、架构体系与专业术语三、Shiro与SpringSecurity的对比四、Shiro优缺点五、springboot集成Shiro一、Shiro简介        ApacheShiro是一个功能强大且易于使用的Java安全(权限)框架。Shiro可以完成:认证、授权、加密、会话管理、与Web集成......
  • JQuery基础28_入门1
    一、概念一个JavaScript框架。简化JS开发jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨 是“writeLess,DoMore”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便......
  • MySQL入门学习.子查询.IN
        IN子查询是MySQL中一种常见的子查询类型,用于在查询中确定一个值是否在另一个查询的结果集中。IN子查询的特点是简洁明了,它可以在一个查询中方便地检查一个值是否在一组值中,非常适用于需要进行条件验证或关联查询的情况。   在MySQL中,有以下几种常见的......
  • MySQL入门学习-子查询.EXISTS
        子查询EXISTS是MySQL中的一种子查询类型,用于检查子查询结果集是否为空。如果子查询结果集不为空,则EXISTS子查询返回TRUE;否则,返回FALSE。    子查询EXISTS的特点是它只关心子查询结果集是否为空,而不关心结果集中的具体内容。这使得EXISTS子查......