5.11python笔记

django与前端、数据库交互基本操作

HttpResponse、render、redirect

#HttpResponse
	主要用于返回字符串类型的数据

def index(request):
    return HttpResponse('index页面')

在页面中就会显示  index页面

#render
	主要用于返回html文件,并且支持模板语法(django自己写的);
        eg:
        return render(request, 'index.html')
        return render(request, 'index.html',{'name':'jason'})  	        index中有使用模板语法,可以使用字典中的数据
 
#redirect
	主要用于重定向,括号内可以写其他网站的全程,也可以写自己网站的后缀
         eg:
        return redirect('https://www.sogo.com')

静态文件及相关配置

一些不会经常被修改的与html页面相关的文件,如css文件、js文件、图片文件、第三方框架文件(bootstrap),都可以称为动态文件。
#static文件夹:
	在django中静态文件单独开设一个文件夹存储,默认叫static文件夹,该文件夹内还可以根据功能的不同继续划分不同的文件,如css文件夹、js文件夹、img文件夹、others文件夹等。
    1、在项目页面的 settings.py 文件中配置 STATIC_URL 。
STATIC_URL = '/static/'

STATIC_URL的作用是用于拼接静态文件的存储路径。

2、在配置文件中配置STATICFILES_DIRS为静态文件的存储路径。
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
]
这里的 static是在和项目同级的目录下创建static 文件夹,用来存储静态文件。
在static 文件夹下,可以创建 css、js、fonts、images等文件下来分类存放静态文件。

'''
    STATIC_URL = '/static/'

    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static")
    ]
'''

request对象方法

request对象方法可以帮助我们获取页面向后端传递的请求或者数据,目前主要以get请求和post请求为主。

# 问题1:django框架,在接收页面提交post请求时,默认会报403错误
	解决办法:配置文件中注释一行代码即可
    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',
]
# 问题2:get请求和post请求都会触发同一个视图函数login的运行,如何针对不同的请求执行不同的代码 >>>: get请求返回一个登录页面;post请求获取用户数据并校验;
def login(request):
	if request.method == 'POST':  # 用户提交登录数据后
        return HttpResponse('默默的奋斗才是王道 有了成就才有发言权')
        username = request.POST.get('username')
        password = request.POST.get('password')  # 获取用户输入后可进行数据比对
        # 比对数据...
        return HttpResponse('默默的奋斗才是王道 有了成就才有发言权')
    return render(request, 'login.html')  # 默认处理get请求,用户使用前缀获取登录界面时,返回html登录界面,让用户输入;
    

# request对象方法
    1.获取post用户提交数据后,可以通过代码获取相关内容比对;
    request.POST  # 结果是一个QueryDict,可以看成字典处理;
    request.POST.get('username')  # 获取标签name='username'的用户输入的数据
    request.POST.getlist('hobby')  # 获取标签name='hobby'的用户传入的多个数据
    
    2.获取url后面携带的数据
    request.GET  # 结果是一个QueryDict,可以看成字典处理;
    request.GET.get('info')  # 获取url携带的info='123'数据
    request.GET.getlist('cityList')  # 获取url携带的多个数据
    以下面网址为例(?后面是携带的数据):
    	https://www.lagou.com/wn/jobs?kd=python&isSchoolJob=1&city=%E4%B8%8A%E6%B5%B7&pn=1

pycharm链接MySQL

"""其实pycharm也可以充当很多数据库软件的客户端"""
1.pycharm右上方侧边 >>> database
2.pycharm左下方边角 >>> database
3.上述两个地方都没有,需要下载插件,或者直接重装一个正常的pycharm
	settings
  	plugins
    	搜索database下载apple即可
        
# 链接数据库
    1.选择数据库 
    2.首次链接需要下载驱动
    	download driver...
    3.测试链接如果不通过 则需要换驱动重新下载使用
    	Driver:MySQL MySQL for 5.1
        '''不再过多讲解 课下可自行研究'''

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': 'jp_05',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': 'jason123',
    }
}
3.指定模块
	在项目同名的文件夹内的__init__.py
  或者应用名的文件夹内的__init__.py
  添加一行固定的代码
  	import pymysql
		pymysql.install_as_MySQLdb()

Django orm

django orm简介:
    ORM:对象关系映射
# 特点
	能够让不会写SQL的python程序员使用python语法就可以直接操作MySQL;
  	好处:提升了开发效率...
    坏处:封装了SQL语句,有时候可能效率不高,还需要人为编写SQL调优;
# 概念
    表							类 
    一行行数据					 类产生的一个个对象
    数据字段					  对象的一个个属性

orm基本使用

1.编写类代码
	class Users(models.Model):
        uid = models.AutoField(primary_key=True)  # 等价于uid int primary key auto_increment
        name = models.CharField(max_length=32)  # 等价于name varchar(32)
        pwd = models.IntegerField()  # 等价于pwd int

2.执行数据库迁移命令
	python3 manage.py makemigrations  # 记录操作
    python3 manage.py migrate  # 将操作迁移到数据库
    '''首次执行迁移命令,django还会自动创建一些默认需要使用到的表'''
    
3.表名的特征
	Users
    app01_users
    # 由于django支持多个应用,为了区分不同应用下可能会出现相同的表名,所以自动加上了应用的前缀,因为同一个应用下不可能出现相同的表名(只要你是个正常的程序员都不会犯这样的错误);
    
4.扩展
	1.表的主键可以不写,orm会自动帮你写一个名为id的主键;
  	2.每次修改了跟数据库相关的python代码,都需要重新执行迁移命令;
  	针对两个迁移命令,可以采用pycharm提示功能编写:
    	tools >>>
      	run manage.py task >>>

数据操作

# 1.增
    user_obj = models.Users.objects.create(name='jack', pwd='333')
    print(user_obj)
    print(user_obj.uid)
    print(user_obj.name)
    print(user_obj.pwd)
    
# 2.查
    res = models.Users.objects.filter(name='jason')
    print(res)  # <QuerySet [<Users: Users object>]>
    print(res[0])  # Users object
    print(res[0].uid)  # 1
    print(res[0].name)  # jason
    print(res[0].pwd)  # 123
    
# 3.改
    models.Users.objects.filter(uid=1).update(name='jasonNB')
    
# 4.删
	models.Users.objects.filter(uid=3).delete()
posted @ 2022-06-05 15:04  槐序八  阅读(50)  评论(0)    收藏  举报