django配置及ORM

django配置及ORM

静态文件配置

什么是静态文件请参考

django在配置(settings)文件中给你提示了配置文件的配置信息,你只需要按照固定的语法格式书写即可提示对应的静态文件的资源

基本配置

settings下

STATIC_URL = ‘/static/’ 访问后端静态资源的接口前缀,默认情况下接口前缀名与静态文件名保持一致

HTML文件下

  1. 你想要访问后端的静态资源,必须以接口前缀开头,后面跟上具体的文件路径,才能访问到对应的资源。
<link rel="stylesheet" href="/xxx(前缀名)/bootstrap-3.3.7-dist/css/bootstrap.min.css">
  1. 当你的接口前缀正确之后,会拿着后面的路径依次去下面列表中的每一个文件夹下查找的资源,顺序是从上往下依次查找,如果都没有找到才会报错。
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static'),  # 这里的static才是你文件夹的路径
    os.path.join(BASE_DIR,'static1'),
    os.path.join(BASE_DIR,'static2'),
]

templates文件下

HTML文件解决上面动态绑定的问题

==记得先导入bootstrap的文件==

{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"> #bootstrap的css文件路径
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>#bootstrap的js文件路径

在这里插入图片描述

form表单

form表单默认是以get请求提交数据的

http://127.0.0.1:8000/login/?username=admin&password=123
#get请求直接显示用户提交的信息

action

  1. 不写,默认朝当前的地址提交数据
  2. 全路径
  3. 后缀(/index)

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

视图函数应该做到针对不同的请求,做出不同的处理逻辑

eg:

  1. get请求来,应该只需要返回一个HTML文件
  2. post请求来,应该获取用户提交的数据,然后做进一步的处理

你必须要能够判断出当前请求到底是什么请求

request对象方法

获取前端请求方式(get/post)

  • request.method 结果是一个纯大写的字符串,GET/POST

  • request.POST 获取post请求提交的数据,类似于是一个大字典

    # <QueryDict: {'username': ['admin', 'jason'], 'password': ['123']}>
    				request.POST.get()  # 只会取列表最后一个元素
    				request.POST.getlist()  # 取出整个列表
    
  • request.GET 获取符合GET请求携带数据格式的数据,url?xxx=yyy&zzz=111

    # <QueryDict: {'username': ['admin', 'jason'], 'password': ['123']}>
    				request.GET.get()  # 只会取列表最后一个元素
    				request.GET.getlist()  # 取出整个列表
    

通常情况下针对不同的请求应该做不同的处理,而一般情况下GET请求次数远远多于POST请求,所以我们应该针对非GET请求做出逻辑判断,将get请求直接写在函数体内而不是做判断.

def login(request):
		要给用户返回一个登陆页面
		print('我被触发了')
		获取前端请求方式
		if request.method == 'GET':
		    # get逻辑
		    return render(request, 'login.html')
		elif request.method == 'POST':
		    # post逻辑
		    # print(request.method,type(request.method))  # GET <class 'str'>  POST <class 'str'>
		    # 获取数据 之后...
		    return HttpResponse('收到了你的数据 马上处理')
		"""为了减少代码的层级:一般情况下视图函数处理get请求较多 所以可以直接再函数体内先写get请求对应的逻辑
		将其他请求利用request.method做出区分
		"""
		if request.method == 'POST':
			return HttpResponse('收到了')
		return render(request,'login.html')

django连接数据库

连接数据库需要提前创建好对应的库

  1. 先去配置文件中配置相关参数

    DATABASES = {
        'default':{
            'ENDINE':'django.db.backends.mysql',
     'NMAE':'库名',
     'HOST':3306,
     'USER':'root',
     'PASSWORD':'123',
     'CHARSET':'utf8'
        }
    }
    
    
  2. 在项目名或者应用名下面的——init——文件中告诉django使用pymysql链接数据库而不是默认的mysqldb

    import pymysql
    pymysql.install_as_MySQLdb()
    

django orm简介

手动创建自己的库名后,django能自动帮你创建表

orm对象关系映射

---->表
对象---->记录
属性---->字段值

作用:能够让一个不会数据库操作的人也能够通过python面向对象语法,句点符来简单快捷的操作数据.

操作增删改查之前,需要去对应的models.py文件中书写你的模型类

class User(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    password = models.IntegerField()

数据库迁移(同步)命令

1. python3 manage.py makemigrations #仅仅是将你对数据库的改动记录到某个地方(migrations文件夹) 
2. python3 manage.py migrate	#将改动真正的同步到数据库中

上面两个命令永远是成对出现的,只要执行了1,就必须执行2才会真正的将数据同步到数据库

字段的增删改查

  1. 字段的增

    1. 要么给该字段设置默认值
    2. 要么运行该字段可以为空
  2. 字段的改

    修改models代码,之后执行数据库迁移命令即可.

  3. 字段的删

    只要注释掉对应的字段即可,执行数据库迁移命令就会将对应的字段及数据信息全部删除(数据库的删除慎用)

数据的增删改查

    1. filter()

      from app(功能应用) import	models
      res = models.User.objects.filter(username='redwei')  #select *from user where username='redwei'
      #返回的结果是一个列表,支持索引取值但是不支持负数索引,并且不推荐使用索引,推荐使用它给你封装好的方法
      user_obj = res.firse()
      #filter方法查找,条件不存在的时候,不会报错,返回的是一个空列表
      '''
      filter括号内直接放多个关键字参数,并且多个关键字参数之间是and关系
      res = models.User.objects.filter(username='redwei',password='123') #select *from user where username='redwei' and password='123';
      '''
      
    2. 查所有的数据

      1. filter()	#括号内不写条件拿所有
      2. all() #查询所有数据
      #二者查询结果都是这样的
      <QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]>
      
    1. create()

      user_obj = models.User.objects.create(name=username,password=password)
      #该方法有返回值,返回值就是当前被创建的对象本身
      
    2. 对象的绑定方法

      1.先生成一个user对象
      user_obj = models.user(name=username,password=passowrd)
      2.调用对象的绑定方法
      user_obj.save()
      
  1. 根据用户点击的对应数据进行删除(HTML文件需要绑定唯一关系)

    获取数据的唯一id
    delete_id= request.GET.get('user_id')
    models.user.objects.filter(id=delete_id).delete()	#将filter过滤出来的数据全部删除
    
  2. 根据数据id获取数据并且展示到前端页面功用户查看修改

    方式一(推荐)
     edit_id= request.GET.get('user_id')
    models.user.object.filter(id=edit_id).update(name=username,password=password)
    
    方式二(了解)
    1. 先获取数据对象
    edit_obj = models.user.objects.filter(id=edit_id).first()
    2.  在修改对象属性
    edit_obj.name = username
    3.调用对象的绑定方法保存
    edit_obj.save()
    
发布了100 篇原创文章 · 获赞 15 · 访问量 3264

猜你喜欢

转载自blog.csdn.net/lipenghandsome/article/details/103837582