Django中的文件介绍
render、HttpResponse和redirect
当我们想起手写一个项目,创建好应用并且注册之后,在urls.py文件先导入app文件夹下migrations下的views.py文件
from app01 import views
在urls.py下urlpatterns添加路由与视图函数的对应关系
url(r'^bilibili/', views.bilibili),
url(r'login', views.login),
url(r'^index/', views.index),
url(r'^home/', views.home_page)
这样我们就可以在views视图里面写视图函数了,Django在views.py文件里预先导入了render模块
render
render返回的是一个HTML文件,render方法需要传两个参数request和templates_name
def login(request):
return render(request, 'login.html')
HttpResponse
render返回的是字符串
def index(request):
return HttpResponse('HELLO DJANGO!')
redirect
redirect 重定向,输入网址会跳转到该网址,既可以写其他网址,也可以写我们自己创建的html页面。
def bilibili(request):
return redirect('https://www.bilibili.com')
def index(request):
return redirect('/login/')
# 写自己创建的只需要写后缀就可以了
需要注意的是所有视图函数都需要传request参数,request表示的是请求相关的所有数据对象。
静态文件配置
静态文件通常是指不是由服务器生成的文件,例如脚本,CSS文件,图像等,但是必须在请求时发送给浏览器。
我们通常将HTML文件默认都放在templates文件夹下,将网站所需要的静态文件默认都放在static文件夹下。django默认不会自动创建static文件夹,需要手动创建。
需要在settings.py文件末尾将静态文件接口开放
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
# 需手动配置
在HTML引入静态文件的两种方式:
{% load static %}
<link rel="stylesheet" href="{% static "bootstrap-5.1.0-dist/css/bootstrap.min.css" %}">
# 这种方式可以动态解析令牌,无论后面怎么改都可以访问
或者:
<link rel="stylesheet" href="/script/css/bootstrap.min.css">
注意:
STATIC_URL = '/static/'
这里的'/static/'表示的是类似于访问静态文件的令牌,如果想要访问静态文件就必须以static开头,当令牌匹配之后才回去STATICFILES_DIRS
列表里从上往下依次查找。都找不到就会报错。
request对象
####### settings.py中 前期先把第四行注释掉,不验证csrf #####
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',
]
request.method
request.method会返回请求方式,并且是全大写的字符串形式。
# 那么我们就可以通过请求方式做逻辑处理
def login():
if request.method == 'POST':
return HttpResponse('get it')
# return 只会执行一个return
return render(request, 'login.html')
request.POST
request.POST接收post请求数据,会返回一个类似于字典一样的数据,这时候我们可以通过get方法取到里面的值。
# POST方法返回的值 <QueryDict: {'username': ['egon'], 'password': ['123']}> <class 'django.http.request.QueryDict'>
def login():
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 这里的键是在前端HTML文件中写好的
需要注意的是get方法取到的value是字符串,并不是看起来像列表的东西,而且get方法只能取到中括号里面最后一个值,想取到所有的值应该用getlist方法,取到的就是列表了。
Django连接MySQL
在settings.py文件里面找到DATABASES配置
# 默认是django自带的sqllite3小型数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
这时候我们连接到MySQL第一步需要更改它的配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': database01, # name对应的是库的名字
'USER':'root'
'PASSWORD':'123'
'HOST':'127.0.0.1'
'PORT':3306,
'CHARSET':'utf8'
}
}
# 第一步之后,如果启动django是会报错的,
# 这是因为django默认用的是mysqldb模块连接MySQL但是该模块兼容性不好
# 需要手动改为pymsql模块进行连接
第二步需要进行代码声明
# 在项目名下的init或者任意的应用名下的init文件中书写以下代码都可以
import pymysql
pymysql.install_as_MySQLdb()
Django ORM
Django 模型使用自带的 ORM。
对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。
ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。
ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。
ORM本质上还是执行的SQL语句。
创建 MySQL 数据库( ORM 无法操作到数据库级别,只能操作到数据表)语法。
创建表(创建类)
# 1.先去model.py中书写一个类
class User(models.Model):
# id int primary_key auto_increment
id = models.AutoField(primary_key=True)
# username varchar(32)
username = models.CharField(max_length=32)
# password = int
password = models.IntegerField()
# 2.数据库迁移命令(每次改变了跟数据相关的代码)
python3 manage.py makemigrations # 生成迁移记录,不操作数据库
python3 manage.py migrate # 将操作真正的同步到数据库
由于一张表中必须要有一个主键字段 并且一般情况下都叫id字段,所以当我们不定义主键字段的时候,ORM会自动创建一个名为id的主键字段。
Charfield必须要指定max_length参数,不指定会报错
verbose_name该参数是所有字段都有的,就是用来对该字段的解释说明,类似于注释
字段的增删改查
字段的增加
1、可以在终端内直接给出默认值
2、设置该字段为空
null=True
3、给出该字段的默认值
default='male'
字段的修改
直接修改代码然后执行数据库迁移的命令,相当于把之前的表覆盖。
字段的删除
对应的字段直接注释掉,再执行数据库迁移的命令。需要注意的是执行完毕之后字段对应的数据也没有了