静态文件配置、request、连接数据库、ORM基本语句

  • 静态文件及相关配置

  • form表单

  • request对象方法

  • pycharm连接MySQL

  • django连接MySQL

  • ORM简介

  • ORM基本操作

  • ORM基本语句

  • 静态文件及相关配置

  • 静态文件

# 编写一个用户登陆界面 编写完成后不会经常使用或被修改的文件 主要针对html文件所使用到的各种资源
css文件 js文件 img文件 第三方框架文件(bootstarp)
这些都可以称之为静态文件

# django针对静态文件资源需要单独开始一个目录统一存放
static目录
    该目录下如果各种类型的文件都多 还可以继续创建目录
               css目录
                js目录
               img目录
        utils目录/plugins目录/libs目录/others目录/不创
        
# 资源访问
   我们在地址栏中之所以可以属于路由获取到相应的资源是因为程序员提前开设了资源的接口
    
# 静态文件资源访问
   默认情况下无法访问 因为我们没有提前开设静态文件资源的访问接口
  • 登录功能
"""
我们之所以可以在浏览器地址栏中输入不同的路由访问到不同的资源  是因为我们在后端框架中提前开设了相应的访问接口所以用户才能访问
言外之意就是我们没有开设接口 那么肯定访问不到
"""
1.开设接口返回登录界面
    # 定义登陆接口
    path('login/', views.login_func)

image

2.登录界面需要使用bootstrap并且还需要自己编写css和js
    创建static目录导入静态文件并编写html样式

image

image

3.访问登录页面
    静态文件全部显示资源不存在
       是因为我们没有开设静态资源访问端口

image

# 开设静态资源的访问接口
   理论上是自己去路由层开设接口资源 但是由于静态文件资源使用频率较高
  因为只要一个web项目肯定需要开设 使用提供了静态资源的配置文件 只要填写固定的配置就可以开设资源接口
   settings.py文件中最下方
  
# 静态文件资源访问接口固定配置
STATIC_URL = '/static/'  # 访问静态文件资源的接口前缀(通行证)
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),  # 存储静态文件资源的目录名称
'''
接口前缀正确之后 会拿着后面的路径依次去到列表中自上而下查找 一旦找到就返回
'''

image

# 接口前缀的动态匹配
如果templates中有很多html文件并且都需要引入静态资源
当你把接口的前缀修改之后页面就无法加载资源,使用我们进行动态的接口前缀绑定
{% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
    <script src="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}"></script>

image

from表单

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',
]

image

request对象

request.method	获取请求方式 结果是纯大写的字符串数据
   GET\POST

image

get请求和post请求都会触发同一个视图函数login的运行
   # 如何针对不同的请求执行不同的代码
    get:请求返回一个登录页面
    post:请求获取用户数据并校验
1.获取当前请求方式
'''加判断 默认让视图函数处理get请求 当为post时走post'''
    if request.method == 'GET':
        # 1.返回html页面
        return render(request, 'login_page.html')
        # 获取post请求体里面的数据
    elif request.method == 'POST':
         print(request.POST)  # <QueryDict: {'name': ['张无忌'], 'pwd': ['123']}>
        return HttpResponse('数据我收到了')
2.获取post请求提交的用户数据
request.POST  # 结果为<QueryDict: {'name': ['张无忌'], 'pwd': ['123']}> 所以我们看成字典处理

image

# 我们可以根据字典的取值方式拿到值
    name = request.POST.get('name') # 获取值列表中最后一个数据值
    pwd = request.POST.get('pwd')
    print(name, type(name), pwd, type(pwd))

image

   print(request.POST.get('name'))# 获取值列表中最后一个数据值
   print(request.POST.get('pwd'))
   print(request.POST.getlist('name'))# 获取值列表所有内容

image

3.如何获取URL后面携带的数据
print(request.GET) # <QueryDict: {'xxx': ['yyy']}>

image

image

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 render(request,'login_page.html')
"""

pycharm连接数据库

"""
pycharm也可以充当很多数据库软件的客户端
"""
1.pycharm左上方侧边 database
2.pycharm右下方边   database
3.如果这两个地方都没有 我们就需要下载插件 或者重新安装一个正常的pycharm

# 链接数据库
1.选择数据库
2.首次链接需要下载驱动
download drive..
3.测试链接如果不通过,则需要换驱动重新下载
Driver:MySQL MySQL for 5.1
4.填写数据库名 用户名 密码

image

django连接数据库

'''
django自带的sqlite3是一个小型的数据库 功能比较少 主要用于本地测试
我们实际项目中都会替换掉它
'''

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


1.修改配置文件
DATABASES = {
    'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'day51',
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'USER': 'root',
            'PASSWORD': '123',
            'CHARSET': 'utf8'
        }
}

2.需要指定模块
django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码
        import pymysql
        pymysql.install_as_MySQLdb()
        
django2.X及以上版本都可以直接通过下载mysqlclient模块解决
       pip3.9 install mysqlclient
    ps:该模块windows下载问题应该不大 主要是mac电脑可能有问题

ORM简介

ORM:对象关系映射
    能够让不会SQL语句的python程序员 使用python面向对象的语法来操作数据库
    
类               表
对象             一条条数据
对象点名字        数据获取字段对应的值

ORM由于高度封装了SQL 所以有时候效率较低 我们需要自己写SQL

ORM基本操作(重要)

1.先在models.py中编写模型类(重要***)
class Users(models.Model):
    id = models.AutoField(primary_key=True)# AutoField 在自动创建主键  相等于 id int primary key auto_increment
    name = models.CharField(max_length=32)# 字段  等价于name varchar(32)
    pwd = models.CharField(max_length=32)
    age = models.IntegerField() # 相当于 age int

image

2.执行数据库迁移相关命令(重要***)
   python39 manage.py makemigrations  # 将操作记录在小本本上
   python39 manage.py migrate  # 将操作同步到数据库上
'''
注意每次在models.py修改了与数据库相关的代码 都需要再次执行上述命令
'''

image

表名的特征
Users      app01_users
由于django支持多个应用,所以为了区分不同应用下可能会出现相同的表名,所以自动加上了应用的前缀,这样就会在一个应用里面出现相同的表名

image

ORM基本语句(重要)

from app01 import models

# 增
models.类名.object.create()
ps:
    res = models.Users.objects.create(name=name, 			pwd=pwd,age=age)
        print(res)  # Users object
        print(res.id)  # 1
        print(res.name)  # 张无忌
        print(res.age)  # 28

# 查
models.类名.object.filter()
ps:
     res = models.Users.objects.filter(name=name)
        print(res)  # <QuerySet [<Users: Users object>]>
        print(res[0])  # 对象
        print(res[0].id)  # 1
        print(res[0].name)  # 张无忌
        print(res[0].age)  # 28
    
# 改
models.类名.object.update()
ps:models.Users.object.filter(id=1).update(name='jason')

# 删
models.类名.object.delete()
ps:models.Users.object.filter(id=1).delete()
posted @ 2022-12-10 20:14  Super小赵  阅读(43)  评论(0编辑  收藏  举报
****************************************** 页脚Html代码 ******************************************