Django如何配置静态文件和怎么实现动态解析,request对象方法的详细操作,以及ORM基本操作都在这里!?? 
什么是静态文件?
static文件夹中,在静态文件夹中创建CSS、JS、img、others文件夹·····配置静态文件,拿第三方框架bootstrap来举例,如果用到静态文件,需要在
settings.py配置,配置好bootstrap的绝对路径只从写根目录写起就ok啦!再需要写静态文件,在
static中写就??了!
'''settings.py'''STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static')]示例:登录
'''urls.py'''from django.contrib import adminfrom django.urls import pathfrom app01 import viewsurlpatterns = [ 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 > <div > <h1 >用户登录</h1> <div > <form> <div > <label for="exampleInputEmail1">Email address</label> <input type="email" id="exampleInputEmail1" placeholder="Email"> </div> <div > <label for="exampleInputPassword1">Password</label> <input type="password" id="exampleInputPassword1" placeholder="Password"> </div> <button type="submit" >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>
提交表单出现403错误,如何解决?

settings.py文件注释掉'django.middleware.csrf.CsrfViewMiddleware',就可以了
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')) print( request.POST.getlist('Email')) 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默认使用的数据库是
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 pymysqlpymysql.install_as_MySQLdb()如果报错: query = query.decode(errors='replace') AttributeError: 'str' object has no attribute 'decode'
解决办法:query = query.decode(errors='replace')提换成query = errors = 'replace'
ORM:对象映射关系程序
通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言;
python与MySQL映射关系
| Python | 映射 | MySQL |
|---|---|---|
| 类 | -------> | 表 |
| 对象 | -------> | 表里面的数据 |
| 对象点属性 | -------> | 字段对应的值 |
?我们的模型类需要写在应用下的models.py文件中
# SQL原生语句和ROM创建的区别class User(models.Model): # id int primary key auto_increment id = models.AutoField(primary_key=True) # name varchar(32) name = models.CharField(max_length=32) # CharField必须要加max_length参数 # age int age = models.IntegerField()???数据库迁移命令(重点)
models.py文件执行了和数据库相关的命令,就重新执行下面这两条命令:python3 manage.py makemigrations、python3 manage.py migrateRUN manage.py Task,输入makemigrations 1.将数据库修改操作先记录到"本本"(对应应用下的migrations文件夹) python3 manage.py makemigrations# 执行完,产生一个文件,用来记录 2.真正的执行数据库迁移操作,同步到数据库 python3 manage.py migrate# 执行完会在数据库中产生Django所需的依赖表,自动创建的 # 自己创建的表user以'应用名_表名'的形式创建,app01_user??不指定id字段和主键等,ORM会自动创建id
# 如果你不指定主键 那么orm会自动帮你创建一个名为id的主键字段class user(models.Model): username = models.CharField(max_length=32) # 就不用写id了···,需要定制id,就写上~# 原来的表class user(models.Model): username = models.CharField(max_length=32) # 增加字段(两种方法) password = models.IntegerField('密码',null=True) # 该字段可以为空 is_delete = models.IntegerField(default=0) # 默认值 # 修改字段直接改代码,然后执行makemigrations,数据库迁移# 删除直接删除或者注释掉代码,然后执行makemigrations,数据库迁移# 1.查询数据# select * from user where name=username;user_obj = models.User.objects.filter(name=username).first()# 2.添加数据# insert into user(name,pwd) values(username,password);models.User.objects.create(name=username,pwd=password)# 3.查询所有的数据# select * from user;models.User.objects.all() # [obj1,obj2,obj3,obj4]# 4.修改数据models.User.objects.filter(id=edit_id).update(name=username,pwd=password)edit_obj.name = usernameedit_obj.pwd = passwordedit_obj.save()# 5.删除数据models.User.objects.filter(id=delete_id).delete()