编写一个登录功能
思路:
1.创建一个django项目并且创建一个app应用
(cmd命令行创建命令:python36 manage.py startapp 应用名)
2.在urls(路由层)添加一组对应关系
3.在views(视图层)书写主要的逻辑代码
4.利用三板斧与前端做交互
注意:
我们之所以可以使用django框架的资源,那是因为urls路由层开设了专门的接口,如果访问不到资源说明未开设专门的接口
什么是静态文件?
静态文件就是HTML页面上那些不经常变动的资源
eg:第三方模块,css相关文件,js相关文件,图片文件
针对静态文件资源一般会放在static文件夹(这不是django自动创建的,需要我们自己手动创建)
当static文件下出现了很多不同类型的静态文件资源的时候,我们可以将这些问价分门别类,在static文件下创建不同功能的文件夹,然后我们只需要根据功能去到对应的文件夹下创建就好了
针对静态文件资源的访问也需要提前开设相应的接口
我们可以发现如果我们不开设相应的接口,我们像以前一样的导入css和js文件的时候,不能用,没有效果
这个时候我们应该想到是settings文件里的配置问题,我们进入到settings文件中,找到STATIC_URL = ‘/static/’ 在这一行代码下新增一个配置
STATICFLIES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
分析:
STATIC_URL = '/static/' 这里的/static/代表的是接口的前缀,就相当于是钥匙
os.path.join(BASE_DIR, 'static') 这里的static代表的是我们自己创建的static文件夹,用于拼接路径
动态解析
这是可以防止数据修改的繁琐问题
代码:{% load static %}
eg:
GET请求
朝别人索要数据,也可以自己携带额外的数据(页面的展示)
eg:url?xxx=yyy&zzz=ooo&aaa=bbb
上述携带数据的方式有两个限制
1.数据只能是一些可以给用户直接看的(无关紧要的非敏感数据)
2.数据的大小有限制 2kb~4kb左右
GET请求是没有请求体的(HTTP数据格式)
POST请求
朝别人提交数据,也可以自己携带额外的参数
数据都是放在请求体中,并且对数据的大小没有限制
form表单默认的数据提交方式是GET
参数分析:
method:是提交的方式,就两种(GET,POST)
action:控制数据提交的地址
方式1: 不写,默认提交到当前地址
方式2: 只写后缀('/index') 会自动补全
方式3: 写全称 eg:https://baidu.com
强调
:
提交POST请求的时候刚开始我们需要去配置文件中注释掉一行代码
MIDDLEWARE = [
# 'django.middleware.csrf.CsrfViewMiddleware',
]
request.method: 获取请求方式,结果是一个纯大写的字符串(GET,POST)
request.POST: 获取到POST请求发来的普通数据(不包含数据)
request.POST.get() 默认只获取列表中最后一个数据值
request.POST.getlist() 获取键对应的整个列表 无论有几个数据值
request.GET 获取url后面携带的非敏感数据
request.GET.get() 默认只获取列表中最后一个数据值
request.GET.getlist() 获取键对应的整个列表 无论有几个数据值
查找pycharm提供的database按钮
位置是在左下角或右侧边栏
如果没有就需要下载插件或卸载重装
首次链接数据库需要下载对应的驱动
可以简单的增删改查
django中自带一个数据库,默认使用的是sqlite3 但是这款数据库一般只用于本地测试 功能较少
我们可以去设置里去下载MySQL
我们在下载好的时候,第一次使用的时候需要下载驱动,如果遇到下载超时,我们需要多下载几次
然后我们还需要配置一些东西
在settings配置文件中修改配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 指定数据库软件名称
'NAME': 'day55', # 指定库名
'USER': 'root',
'PASSWORD': '123',
'HOST': '127.0.0.1',
'PORT': 3306,
'CHARSET': 'utf8'
}
}
在我们运行的时候会遇到问题,这个时候我们需要下载mysqlclient模块
版本不一致,解决的方式不一致
django1.11 版本需要在项目或者应用目录下的__init__.py中编写一行代码
import pymysql
pymysql.install_as_MySQLdb()
django2.2 以上版本需要使用mysqlclient模块
ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
映射关系
类 映射成 表
对象 映射成 记录
对象点属性 映射成 字段对应的值
ORM的存在可以让不会MySQL的python程序员 使用python的语法简单快捷的操作MySQL
应用目录下的models.py编写模型类
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) # 类似于定义了普通字段
# pwd int
pwd = models.IntegerField() # 类似于定义了普通字段
当我们对数据库或者modules.py文件做了操作的时候,我们需要在终端中运行两行代码:
数据库迁移/同步命令
1.将models中有关数据库的操作记录下来(migrations文件夹)
python3.6 manage.py makemigrations
2.将操作真正影响到数据库中
python3.6 manage.py migrate
强调
:
表的主键在orm中 可以不写 orm会自动帮你添加一个id的主键
如果你需要主键的名称不叫id 只能自己创建
1.查
models.User.objects.filter() 结果可以看成是一个列表套数据对象
如何获取对象 可以使用first()方法 如果没有值会返回None 我们if判断即可
2.增
models.User.objects.create()
3.改
models.User.objects.filter(id=1).update(name='jasonNB')
4.删
models.User.objects.filter(id=4).delete()
举例说明:
创建一个学生表
class Student(models.Model):
name = models.CharField(max_length=20)
gender = models.BooleanField(default=True)
age = models.IntegerField(default=0)
content = models.TextField(max_length=200)
email = models.EmailField()
单表操作
增
models.Student.objects.create(name='学生A', gender=False, age=122, content='学习优异', email='[email protected]')
# 删
models.Student.objects.get(id=1).delete()
# 改
models.Student.objects.get(name='学生A')
# 查
models.User.objects.filter(id=1)
# all():查询所有结果;QuerySet
语法结构:
外键名 = models.ForeignKey("类名",to_field="关联字段",default=默认值,on_delete=models.CASCADE,) #关联字段必须是唯一的,这个to_field不加也可以,默认用的就是主键
一对多
外键字段建在多的一方
publish = models.ForeignKey(to=‘Publish’,on_delete=models.CASCADE)
多对多
外键字段可以直接写在某张表中 orm会自动帮你创建第三张表
authors = models.ManyToManyField(to=‘Authors’)
一对一
外键字段建在查询频率较高的表中
detail = models.OneToOneField(to=‘AuthorDetail’,on_delete=models.CASCADE)