目录
配置文件的介绍
SECRET_KEY = '0yge9t5m9&%=of**qk2m9z^7-gp2db)g!*5dzb136ys0#)*%*a' # 盐
DEBUG = True # 调试模式, 等项目上线的时候,改成False
# 配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# 改语言的
LANGUAGE_CODE = 'zh-hans'
# 改时区
TIME_ZONE = 'Asia/Shanghai'
静态文件的配置
# 以登录功能为例讲解
"""
我们在Django中一般把html文件放到tempates文件夹下面
把静态文件放到static文件夹下面
"""
# 静态文件
"""
就是我们常见的:
CSS文件
JS文件
img
我们的第三方前端框架:bootstrap相关的
...
"""
# Django不会帮我们创建static文件夹,需要我们自己手动创建出来
# 名字可以不叫static,但是大家都叫static,你就不要改了,就用这个
'''在static文件夹下面还可以按照功能的不同,进行目录的划分
css
js
img
...
'''
# 在浏览器中输入网址,如果找不到,说明对应的服务端没有开设对外访问的接口
# 如果我们在后端开放这样一个接口,那是不是就可以访问了
# 静态文件配置
STATIC_URL = '/xxxx/'
# 以后凡是找静态文件,都从下面的列表中得路径去找
# STATICFILES_DIRS = [
# '/static/css/my.css'
# ]
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
# 动态解析
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
<script src="{% static 'js/jquery.min.js' %}"></script>
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
request对象
request.method 获取请求方式 结果是纯大写的字符串数据
GET\POST
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()
"""
form表单
action 控制数据提交的地址
1.action="" 数据默认提交给当前页面所在的地址
2.action="https://www.baidu.com/" 完整地址
3.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',
]
Django链接数据库(MySQL)(掌握)
django自带的sqlite3是一个小型的数据库 功能比较少 主要用于本地测试
我们实际项目中都会替换掉它
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# 链接MySQL数据库
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db13',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123',
'CAHRSET': 'utf8',
}
# 以上配置改完之后,框架启动不起来了
'''
djang框架底层链接MySQL用的模块是MySQLdb模块,这个模块的兼容性很差,所以,我们不用
我们认为的把MySQLdb模块改为pymysql模块
'''
# 如何修改pymysql模块呢?
在Django框架的任意__init__.py文件中加入一下两句话:
*************************************************************************
import pymysql
####################################这句话的意思其实就是猴子补丁
pymysql.install_as_MySQLdb()
*************************************************************************
# 要先安装pymysql模块
'''
2.需要指定模块
django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码
import pymysql
pymysql.install_as_MySQLdb()
django2.X及以上都可以直接通过下载mysqlclient模块解决
pip3.8 install mysqlclient
ps:该模块windows下载问题不大 主要是mac电脑可能有问题
'''
Django的ORM操作
ORM: 对象关系映射
作用:我们以后再操作数据库的时候,就不用在写原生sql语句,用面向对象的代码去写,然后他给你翻译成原生sql语句。
# 缺点:封装程度太高,ORM的sql执行效率没有原生sql执行的效率高,这个效率的影响暂时忽略
# 关系映射:
表 >>>: 类名
记录 >>>: 对象
字段 >>>: 属性
'''我们的ORM相关代码写在哪里呢?在models.py文件中写'''
# 创建一张表出来
# 代码写完之后,需要执行两个命令才能把表创建出来
# *******************************************************************************
python36 manage.py makemigrations # 相当于把迁移过程发生的事情给你记下来了
python36 manage.py migrate # 这句话才真正的把表创建出来
'''上面两句话缺一不可,都要执行!!!'''
'''只要修改了跟数据库相关的代码,都要执行上面两句话'''
# *******************************************************************************
class Author(models.Model):
''''
由于每张表都应该有一个主键字段,并且主键字段名都叫id,如果满足这两个条件,那么,可以省略不写,自动帮你常见主键字段出来
'''
# username varchar(32)
username = models.CharField(max_length=32)
# password varchar(32)
password = models.CharField(max_length=32)
ORM基本语句
from app01 import models
models.类名.objects.create() #增加
models.类名.objects.filter() #查找
models.类名.objects.update() #修改
models.类名.objects.delete() #删除
数据的增查
# 查
res=models.UserInfo.objects.filter(username=username, password=password).first()
'''filter(username=username, password=password)里面的条件是and关系'''
if res:
# print('登录成功')
#增
models.UserInfo.objects.create(username='tank',password='123')
else:
print('用户名或者密码错误')
模板变量的分配
def ab_render(request):
# 第一种方式分配变量到模板中
user_dict = {'username': 'kevin', 'password': 123}
user_dict1 = {'a':1}
# 第二种方式
print(locals()) # 会把该函数局部里面的所有变量都分配到模板文件中
# return render(request, 'ab_render.html', {'user_dict':user_dict, 'user_dict1':user_dict1})
return render(request, 'ab_render.html', locals())
标签:username,models,数据库,request,django,DRM,static,Django
From: https://www.cnblogs.com/whxx/p/17346692.html