Python教程

学习python-Day51

本文主要是介绍学习python-Day51,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

今日学习内容

静态文件及相关配置

使用django步骤

  1. 创建django项目并创建对应关系
  2. 在urls.py中添加一组对应关系
  3. 在APP的views.py中编写核心业务代码
  4. 利用三板斧与前端做交互: HttpResponse、render、redirect

浏览器资源访问

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

静态文件

html页面上不经常改变的资源

  • 第三方框架文件
  • css文件
  • js文件
  • 图片文件

针对静态文件资源一般放置static文件夹里面,统一管理。

当static目录下有很多不同类型是静态文件资源,我们还可以划分更多文件夹,方便管理。

  • others文件夹

    存储第三方框架文件

  • css文件夹

    所有的css文件

  • js文件夹

    所有的js文件

  • imgs文件夹

    所有图片文件

静态文件、接口

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

'''
注意:每个静态文件资源地址不是固定的,
所以需要在settings.py文件中配置静态文件。
'''

STATIC_URL = '/static/'  #接口前缀
# 静态文件资源配置
STATIC_DIRS =[
    os.path.join(BASE_DIR, 'static')
]

1.接口前缀:STATIC_URL = '/static/'
	就是资源访问的入场券,没这个前缀,任何资源都访问不到,而且接口前缀必须要有,格式必须要对。
2.资源配置里的static  这个表示资源存在的文件路径。
	2.1资源配置中以列表类型表示里面可以存放多个数据值,也就是说可存放多个静态文件路径。
	2.2静态文件的查找方式至上而下。

3.为了解决接口前缀方便去切换和更改。引入动态解析
动态解析:
	{% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">

image

请求方法

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

  1. GET请求

    • 索取资源

    • 携带额外数据:URL? xxx= 参数1 & xx= 参数2...

    • 限制:

      • 无关紧要非敏感数据
      • 大小:2KB-4KB左右

      无请求体(Http数据格式)

    image

  2. POST请求

    • 提交资源

    • 携带额外数据:

      • 可携带敏感数据
      • 请求体
      • 大小无限制

image

会出现一下403响应码表示访问权限不够。所以要在提交post请求前需去配置文件中注释一行代码

image

  1. form表单默认的数据提交方式是get

    method = 'post'
    action 控制数据的提交地址
    	方式1:不写,默认当前页面所在的地址提交
        方式2:写后缀 /index/  自动补全ip和port
        方式3:写全称 https://www.baidu.com
    
    
  2. 提交post请求前需去配置文件中注释一行代码

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

    image

request对象方法

  1. request.method 获取请求方式,结果是纯大写的字符串

  2. request.POST

    获取发送来请求体的普通数据(不包含文件)
    
    request.POST.get()     默认只获取列表中最后一个数据值
    request.POST.getlist()  获取键对应的整个列表里所有数据值
    
  3. request.GET

    获取url后面携带的非敏感数据
    
    request.GET.get()     默认只获取列表中最后一个数据值
    request.GET.getlist()  获取键对应的整个列表里所有数据值
    
    def login(request):
        '''该函数将会通过不同的请求方式触发,并且需要执行不同的业务逻辑代码'''
        print(request.method)  #POST
        if request.method == 'POST':
            print(request.POST) #<QueryDict: {'username': ['xz'], 'password': ['123']}>
            print(request.GET) #<QueryDict: {}>
            print(request.POST.get('username'), request.POST.get('password')) #xz 123
            print(request.POST.getlist('username')) #['xz']
            res = request.POST.get('username')
    
            print(type(res)) #<class 'str'>
            return HttpResponse('发送到了!')
        #print(request.GET.getlist())
        return render(request, 'login.html')
    
    

pytharm链接MySQL

步骤

  1. 查找pycharm提供的database按钮

    左下角或右侧边栏、下载插件、以上都找不到,那就卸载重新下载。

  2. 首次链接数据库需要下载对应的驱动

  3. 简单的增删改查

django链接MySQL

django默认使用的是sqlite3,但是这款数据库一般只用于本地测试,功能少。

  1. 配置文件中修改配置

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',  # 指定数据库软件名称
            'NAME': 'day55',  # 指定库名
            'USER': 'root',
            'PASSWORD': '123',
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'CHARSET': 'utf8'
        }
    }
    
  2. 指定链接MySQL的模块

    django1.11版本需要在项目或者应用目录下的__init__.py中编写一行代码
    	import pymysql
        pymysql.install_as_MySQLdb()
        
    django2.2
    以上版本需要使用mysqlclient模块
    在命令行中下载 pip install mysqlclient
    

    image

django orm

ORM:对象关系映射

类			 映射成		表
对象		    映射成		   记录
对象点属性	  映射成		字段对应的值
'''
ORM的存在可以不会让不会MySQL的python程序员,使用python的语法简单快捷的操作MySQL
'''
  1. 先去应用目录下models.py编写模型类

    class User1(models.Model):  #类似于定义了表名
        id = models.AutoField(primary_key=True)#类似于定义主键
        name = models.CharField(max_length=32)#类似于定义普通字段
        pwd = models.IntegerField() #类似于定义普通字段
    
  2. 数据库迁移/同步命令

    1.将models中有关数据库的操作记录下来(migrations文件夹)
    		python manage.py makemigrations
    2.将操作真正影响到数据库中
        	python manage.py migrate
    	'''当修改了models中与数据库相关的代码 都必须执行上述的命令'''
    3.可以简写也可以指定应用单独迁移/同步
            makemigrations app01
        	migrate app01
       
    注意:创建后的表都是前面有APP名为前缀的,_后面的表名
    	orm创建外键也会在后面加_id后缀。所以书写外键的时候可以不用加后缀。
    

    image

    image

    image

  3. 表的主键在orm中可以不写orm会自动帮你添加一个id的主键

    如果你需要主键的名称不是id字段就只能自己去创建。

image

orm语法

1.查
	models.User.objects.filter()	结果可以看成是一个列表嵌套数据对象
    如何获取对象,可以使用first()方法,如果没有值会返回None,我们用if判断。
    也能用索引,但是对于不存在的对象会报错,所以我们这里不用索引。
2.增
	models.User.objects.create(name='wyb',pwd='123')
3.改
	models.User.objects.filter(id=1).update(name='xz')
4.删
	models.User.objects.filter(id=4).delete()

注意:浏览器按键发送请求,后端view.py就执行代码,然后数据库就改变。

orm外键关联

MySQL
    一对多
    	外键字段建在多的一方
    多对多
    	外键字段建在第三张关系表
    一对一
    	外键字段建在查询频率较高的表中
 
ORM
	一对多
    	外键字段建在多的一方
    publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE)
   	
 	多对多
    	外键字段可以直接写在某张表中
        orm会自动帮你创建第三张表
    authors = models.ManyToManyField(to='Authors')
    
   一对一
    	外键字段建在查询频率较高的表中
    detail = models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)

image

这篇关于学习python-Day51的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!