django静态文件配置以及连接mysql
配置管理员中文界面
LANGUAGE_CODE = 'zh-hans'
#这样重启服务端就是中文了
静态文件配置
- 编写一个用户登录页面
- 静态文件
不怎么经常变化的文件 主要针对html文件所使用的各种资源
css文件 js文件 img文件、第三方框架文件
django怎对静态文件资源需要单独开设一个目录统一存放
static目录:该目录下如果各种类型的文件都多 还可以继续创建目录
- css目录
- js目录
- img目录
- utils目录/plugins目录/libs目录/others目录/不创
- 资源访问
我们在地址栏中之所以可以属于路由获取到相应的资源是因为程序员提前开设了资源的接口
静态文件相关配置
首先找到项目的配置文件settings.py
文件,然后再最后面加上这一句话
STATICFILES_DIRS=[] # 里面是静态文件的配置路径
STATICFILES_DIRS=[
os.path.join(BASEBASE_DIR,'static')
]
STATIC_URL = '/static/' # 这个对应的是html的文件前缀也就是访问文件静态资源的接口前缀(通行证)
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # 这个static这个对应的是项目static目录文件
os.path.join(BASE_DIR, 'static1'), # 存储静态文件资源的目录名称
os.path.join(BASE_DIR, 'static2'), # 存储静态文件资源的目录名称
]
接口前缀正确之后 会拿着后面的路径依次去到列表中自上而下的查找 一旦找到就返回
这个静态文件就可以正常访问了
但是这里就又出现一个新的问题了,如果需要该接口前缀,那么,如果有很多html页面那么就需要修改很多的链接前缀了很麻烦。
接口前缀动态匹配
{% load static %}
<script src="{% static 'jQuery3.16/jQuery.3.16.js' %}"></script>
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script>
form表单
action 控制数据的提交的地址
- action="" 数据默认提交给当前页面所在的地址
- action="https://www.baidu.com/" 完整地址
- action="/index/" 朝当前服务端的index地址提交
method 控制数据的提交的方法
- 默认是get
- 可以改post
请求方法补充
-
get
朝服务端索要数据 也可以携带一些额外的要求
携带额外数据的方式:URL?xxx=yyy&uuu=zzz问号后面携带数据的大小是有限制(2kb)的并且不能携带敏感数据
-
post
朝服务端提交数据
携带额外的数据方式:请求体
请求体携带数据安全性较高并且没有大小限制
前期发送post请求需要注释掉配置文件中的某一行
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',
]
csrf认证,再提交form表单是会进行认证,如果不注释就需要再html的form表单里面添加下面这句话
{% csrf_token %} #需要把这句话添加到form表单就可以了,前期学习可以把这个插件去掉这句话就不用加了
<form action="" method="post">
{# {% csrf_token %} <!-- 这个必须放在form标签里面或者是再settings里面注释掉哪个插件才行-->#}
<h1 class="btn-block text-info text-center">用户注册</h1>
<p>用户名<input type="text" class="btn btn-block" name="name" placeholder="请输入用户名"></p>
<p>密码<input type="password" class="btn btn-block" name="pwd" placeholder="请输入密码"></p>
<p><input type="submit" class="btn btn-block btn-success" value="注册"></p>
</form>
这样就可以了
request对象
request.method 获取请求方式 结果是纯大写的字符串数据
POST/GET
request.POST 获取post请求请求体里面携带的数据
request.POST.get() 获取列表最后一个数据值
request.POST.getlist() 获取整个列表数据 #必须要传一个参数,获取这个参数下的所有数据
request.GET 获取网址问号后面携带的数据
request.GET.get() 获取列表中的最后一个数据值 #必须要传一个参数,获取这个参数下的所有数据
request.GET.getlist() 获取整个列表数据
在视图函数中针对不同的请求代码编写
if request.method =='POST':
return HttpResponse()
return HttpResponse()
pycharm连接数据库
-
pycharm初次连接数据库 需要下载对应驱动
django连接数据
django自带的sqlite3是一个小型的数据库 功能比较少 主要用于本地测试
实际项目中都会替换掉它
默认配置sqlite3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
修改配置文件
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': 'localhost',
'PORT': 3306,
'USER': 'root',
'PASSWORD': 'root',
'NAME': 'djg01',
'CHARSET': 'utf8'
}
需要指定模块
django1.x版本需要在项目目录下或则app目录下_init_.py编写代码
import pymysql
pymysql.install_as_MySQLdb()
django2.x及以上都可以直接通过下载mysqlclient模块解决
pip3.8 install mysqlclient
该模块windows下载问题不大 主要是mac电脑可能有问题
报错以及修改
解决办法修改源码
windows下载了mysqlclient这个模块上面的源码就不能修改了,再改回去就行了
ORM简介
ORM:对象关系映射
能够让不会SQL语句的python程序员 使用python面向对象的语法来操作数据库
类 表
对象 一条条数据
对象点名字 数据获取字段对应的值
ORM由于高度封装了SQL 所以有时候效率较低 我们需要自己手写SQL
ORM基本操作
- 先在models.py中编写模型类
class Goods(models.Model):
# 字段名 = 字段类型+约束条件
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
price = models.IntegerField()
#在项目终端执行命令
#将操作记录到小本本上(migrations)
python38 manage.py makemigrations
#将操作记录到数据库上,同步数据
python38 manage.py migrate
注意每次在models.py修改了与数据库相关的代码 都需要在次执行上述命令
ORM基本语句
import goods.models
install = goods.models.Goods.objects.create()
select = goods.models.Goods.objects.filter() # 返回的是列表套对象的形式
update = goods.models.Goods.objects.filter()[0].update() # 如果不先查询那么就是修改全部
delete = goods.models.Goods.objects.filter()[0].delete() # 如果不先查询那么就是删除全部