Djanjo
一、静态文件
什么是静态文件
- 静态文件:写好的文件不会动态的改变的的文件的资源 比如css 文件,js文件 图片文件,第三方框架等
- 墨守成规的将这些文件放在自创 static文件夹中 在静态文件夹中创建css,js, img,other文件夹.....
配置静态文件 那第三方框架bootstrap来举例,如果用到静态文件,需要setting.py配置 配置好bootstrap的绝对路劲 只从根目录写起就好了
再需要写静态文件,再static中写就好了
'''settings.py''' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ]eg:
'''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>
- 配置静态文件完成之后 那么在static文件下的文件都可以通过路径访问到 eg:
127.0.0.1:8000/static/a.txt- 如果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'





浙公网安备 33010602011771号