django学习笔记

今日内容概要

  • 静态文件及相关配置
  • 请求方法
  • request对象方法
  • pycharm连接MySQL
  • django连接MySQL
  • django orm简介
  • orm基本操作

今日内容详细

静态文件及相关配置

我们在访问django框架资源的使用之所以可以拿到数据是因为提前在urls.py文件中开设了相应的资源接口,如果访问不到资源那么就是没有开设相应的接口。

编写登录功能

思路:

1.创建django项目并创建一个app

2.在urls.py添加一组对应关系

3.在app的views.py中编写登录核心逻辑

4.利用三板斧与前端做交互

def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = models.User.objects.filter(name=username,pwd=password).first()
        if user_obj:
            return HttpResponse('登录成功')
        return HttpResponse("用户名或密码错误")
    return render(request, 'login.html')

静态文件

登录界面需要使用bootstrap并且还有需要自己编写的css和js文件,文件多就需要分门别类管理,就需要知道一下什么是静态文件。

静态文件就是html页面上使用的不经常改变的资源。

第三方框架文件(bootstrap)、css文件、js文件、图片文件,上述文件都可以称之为是静态文件

针对静态文件资源一般都会放在static文件夹内,当static目录下出现了很多不同类型的静态文件资源,那么还可以分类管理
    others文件夹
        第三方框架文件
    css文件夹
        所有的css文件
    js文件夹
        所有的js文件
    img文件夹
        所有的img文件

相关配置

针对静态文件资源的访问也需要提前开设相应的接口

理论上应该自己去路由层开设接口资源,但是由于静态文件资源使用频率很高,只要是一个web项目都肯定需要,所以django为了避免开发者繁琐,提供了静态资源的配置文件,只需要填写固定的配置即可开设资源接口。

STATIC_URL = '/static/'  # 作用是什么  /static/是访问静态资源的接口前缀
# 静态文件资源配置
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]  # 为什么是列表(用来存储多个数据的)  这里的static是存储静态文件资源的文件夹名称

以该地址为例:/static/bootstrap-3.4.1-dist/css/bootstrap.min.css

1./static/是接口前缀,表示具备访问静态文件资源的权限

2.具备了权限之后会拿着接口前缀后面的文件路径(bootstrap-3.4.1-dist/css/bootstrap.min.css)去列表中每个文件夹中查找

3.去该路径下面找到一个就结束,比如 static和static1里面都有a.txt 那么只会拿到static中的

4.去该路径下面找完全部都没有就报错

动态配置:修改了接口前缀也能访问

{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">

请求方法

URL:统一资源定位符(网址)

GET请求

朝别人索要数据,也可以携带额外的数据

GET请求没有请求体(HTTP数据格式)

携带数据的方法:就是在URL后面加个?,把要添加的数据写在?后面。

url?xxx=yyy&zzz=ooo&aaa=bbb

上述携带数据的方式有两个限制

1.数据只能是一些无关紧要的非敏感数据
2.数据大小有限制,一般在2KB~4KB左右

POST请求

朝别人提交数据,也可以携带额外的数据

数据都是放在请求体中并且数据大小没有限制

页面需要获取前端用户数据并且传递给后端

思路:通过form表单传递数据。form表单默认的数据提交方式是get。
method = 'post' :控制请求的提交方式
action 参数:控制数据的提交地址
方式1:不写参数,就是朝当前页面所在的地址提交
方式2:写后缀,比如/index/,自动补全ip和port
方式3:写全称,比如https://www.baidu.com/

提交post请求前期需要去配置文件中注释一行代码

MIDDLEWARE = [# 'django.middleware.csrf.CsrfViewMiddleware',]

request对象方法

get请求和post请求都会触发同一个视图函数login的运行。

问题:如何针对不同的请求执行不同的代码?

思路:get请求返回一个登录页面,post请求获取用户数据并校验。

解决方式:

"""由于get请求更加常见 post请求次之 所以还可以按照下列方式简写"""
if request.method == 'POST':
        return HttpResponse('POST请求返回的页面')
    """默认让视图函数处理get请求"""
return render(request, 'login.html')
方法 说明
request.method 获取请求方式,结果是纯大写的字符串
request.POST 获取POST请求发送来的普通数据(不包含文件)
request.POST.get() 默认只获取列表中的最后一个数据值
request.POST.getlist() 获取键对应的整个列表,无论有几个数据值
request.GET 获取url后面携带的非敏感数据
request.GET.get() 默认只获取列表中最后一个数据值
request.GET.getlist() 获取键对应的整个列表,无论有几个数据值

pycharm连接MySQL

pycharm也可以充当很多数据库软件的客户端。

如何进入pycharm的数据库客户端:

  1. 查找pycharm提供的database按钮,pycharm右上方侧边,左下方边角
  2. 上述两个地方都没有 需要下载插件 或者直接重装一个正常的pycharm。

img

我们以mysql为例子。

第一步:选择mysql数据库。

第二步:输入用户名,密码和库名,测试连接(第一次需要下载驱动)

img

django链接MySQL

django默认自带一个sqlite3数据库,但是功能很少,仅用于本地测试。

1.默认配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

2.修改配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 指定数据库软件名称
        'NAME': 'db_django', # 指定库名
        'HOST': '127.0.0.1', # 本机地址
        'PORT': 3306, # 本机mysql端口
        'USER': 'root', # 用户名
        'PASSWORD': '123', # 密码
        'CHARSET': 'utf8' # 编码
    }
}

3.指定连接MySQL的模块

django1.11 版本需要在项目或者应用目录下的__ init__.py中编写一行代码

import pymysql
    pymysql.install_as_MySQLdb()

django2.2 以上版本需要使用mysqlclient模块

django orm 简介

ORM:对象关系映射

好处:能够让不会写MySQL的python程序员使用python语法简单快捷的操作MySQL。

坏处:封装了SQL语句,有时候可能效率不高,还需要人为编写SQL提升效率。

概念对应关系

ORM 映射 MySQL
映射成
对象 映射成 记录
对象点属性 映射成 字段对应的值

orm基本使用

在应用目录下的models.py编写模型类

class user(models.Model):  # 类似于定义了表名
    id = models.AutoField(primary_key=True)  # 类似于定义了主键
    # id int primary key auto_increment

    name = models.CharField(max_length=32)  # 类似于定义了普通字段
    # name varchar(32)

    pwd = models.IntegerField()  # 类似于定义了普通字段
    # pwd int

数据库迁移/同步命令

1.将models中有关数据库的操作记录下来(migrations文件夹)
python38 manage.py makemigrations

2.将操作真正影响到数据库中
python38 manage.py migrate

'''
首次执行迁移命令 django还会自动创建一些默认需要使用到的表
当修改了models中与数据库相关的代码 都必须执行上述的命令
'''
ps:可以简写 也可以指定应用单独迁移/同步

补充

1.迁移数据命令生成的表面的特征是:应用名_类名。由于django支持多个应用,为了区分不同应用下可能会出现相同的表名。

2.表的主键在orm中可以不写,orm会自动帮你添加一个id的主键,如果你需要主键的名称不叫id只能自己创建。

3.每次修改了跟数据库相关的python代码,都需要重新执行迁移命令。

4.针对两个迁移命令,可以采用pycharm提示功能编写,在tools里的run manage.py task中编写命令即可。

orm基本操作

orm语法

如何获取对象?
可以使用first()方法,如果没有值会返回None,然后用if判断即可

1.查
models.User.objects.filter()  # 结果可以看成是一个列表套数据对象

2.增
models.User.objects.create()

3.改
models.User.objects.filter(id=1).update(name='jasonNB')

4.删
models.User.objects.filter(id=4).delete()

'''改和删操作前需要先找到需要的操作的数据,如果不写就是默认操作所有数据'''

orm外键关联

MySQL
    一对多
        外键字段在多的一方
    多对多
        外键字段建在第三张关系表
    一对一
        外键字段建在查询频率较高的表中

ORM
    一对多(关键字ForeignKey)
        外键字段建在多的一方
        publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE)
    多对多(关键字ManyToManyField)
        外键字段可以直接写在某张表中,orm会自动帮你创建第三张表
        authors = models.ManyToManyField(to='Authors')
    一对一(关键字OneToOneField)
        外键字段建在查询频率较高的表中
        detail = models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)
'''
on_delete=models.CASCADE  级联更新,级联删除
'''
posted @   空白o  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示