Django(二)

x33g5p2x  于2022-02-28 转载在 Go  
字(4.6k)|赞(0)|评价(0)|浏览(458)


Django如何配置静态文件和怎么实现动态解析,request对象方法的详细操作都在这里!👆

Django(二)

静态文件

什么是静态文件?

  • 静态文件:写好的文件不会动态改变的文件资源,比如CSS文件,Js文件,图片文件,第三方框架等·····
  • 墨守成规的将这些文件放在自创static文件夹中,在静态文件夹中创建CSSJSimgothers文件夹·····
    配置静态文件,拿第三方框架bootstrap来举例,如果用到静态文件,需要在settings.py配置,配置好bootstrap的绝对路径只从写根目录写起就ok啦!

再需要写静态文件,在static中写就🆗了!

'''settings.py'''
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]

示例:登录

'''urls.py'''
from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),

]

'''views.py'''
from django.shortcuts import render

# Create your views here.
def  login(request):
    return render(request,'login.html')
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/CSS/bootstrap.min.css">
    <script src="/static/JS/bootstrap.min.js"></script>
    <script src="/static/JS/jQuery3.6.js"></script>
</head>
<body>
    <div class="container">
        <div class="row">
            <h1 class="text-center">用户登录</h1>
            <div class="col-md-8 col-lg-offset-2">
                <form>
  <div class="form-group">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Email">
  </div>
  <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
  </div>

  <button type="submit" class="btn btn-primary btn-block">Submit</button>
</form>
            </div>
        </div>
    </div>
</body>
</html>

ps:配置静态文件完成后,那么在static文件下的文件都可以通过路径来访问到,eg:127.0.0.1:8000/static/a.txt

ps:如果Django主页面不能访问了,在urls.py文件中写一个默认的对应关系补充

静态文件配置及访问顺序

静态文件

STATIC_URL = '/static/'  # 接口前缀,不是文件名,类似"令牌"

'''
如果你想要访问静态文件资源必须以static开头,如果写了接口前缀之后,下面的静态配置文件下的文件都能够访问
'''
# 静态文件配置,可以写多个,访问的顺序是从上往下依次查找
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static'),
    os.path.join(BASE_DIR,'static1'),
    os.path.join(BASE_DIR,'static2'),
]

动态解析

涉及到接口前缀的修改繁琐的问题,那么现在使用动态解析的语法来实现,修改了接口前缀也能够动态解析,从而不需要挨个文件的修改!

<!--静态配置-->
<script src="/static/JS/bootstrap.min.js"></script>
<script src="/static/JS/jQuery3.6.js"></script>

<!--上下对比-->

<!--动态解析配置-->
{% load static%}
    <link rel="stylesheet" href="{% static '\CSS\bootstrap.min.css' %}">
    <script src="{% static '\JS\bootstrap.min.js' %}"></script>

request对象方法

提交表单出现403错误,如何解决?

settings.py文件注释掉'django.middleware.csrf.CsrfViewMiddleware',就可以了

request方法

  • request.method:获取当前请求方法
  • request.body:以二进制的形式返回用户提交的数据
  • request.POST:以字典的形式返回用户提交的数据
from django.shortcuts import render,HttpResponse,redirect

# Create your views here.
def  login(request):
    print(request.method, type(request.method))  # GET <class 'str'>
    if request.method=='POST':
        return HttpResponse('POST请求返回结果!')
    return render(request,'login.html')   # GET请求返回页面

注意:request.POST返回的字典用get方法获取列表形式的value,返回的是字符串,get方法只会取列表的最后一个元素

# 在获取用户多选或者提交的信息是多条,返回在一个列表内如何获取用户数据呢?
使用request.POST.getlist方法,返回一个列表,就不再使用get方法了

def  login(request):
    print(request.method, type(request.method))  # GET <class 'str'>
    print( request.POST)
    print( request.POST.get('Email'))       #   123@qq.com
    print( request.POST.getlist('Email'))   # ['123@qq.com']
    if request.method=='POST':
        return HttpResponse('POST请求返回结果!')
    return render(request,'login.html')   # GET请求返回页面

GET请求方式的方法是一样的

如何获取URL?后面的参数?

request.GET方法:和request.POST方法是一样的,返回字典

request.GET.get(k):获取字典的value,返回字符串

request.GET.getlist(k):获取用户数据,获取到整个列表

文件对象如何获取??
针对表单提交的文件对象,如何获取?这里不能使用request.POST或者request.GET方法,使用request.FILES方法,返回结果看成字典即可

  • 获取表单提交文件对象的方法:request.FILES
    方法有了,返回的是空字典,在表单中添加enctype参数,再提交就可以获取到文件对象
<form action="" method="post" enctype="multipart/form-data">

Django连接MySQL

Django默认使用的数据库是sqlite3,这里介绍如何使用Django连接MySQL数据库

1、修改配置文件

# 默认的情况settings.py文件
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
# 修改配置文件
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '数据库',
        'HOST':'ip地址',
        'PORT':3306,
        'USER':'用户名',
        'PASSWORD':'密码',
        'CHARSET':'utf8'
    }
}
# 数据库使用是提前创好的!!!

2、在项目文件夹或应用文件夹中的__init__.py文件书写固定的代码

'''__init__.py'''
import pymysql
pymysql.install_as_MySQLdb()

如果报错: query = query.decode(errors='replace') AttributeError: 'str' object has no attribute 'decode'

解决办法:query = query.decode(errors='replace')提换成query = errors = 'replace'

相关文章