Django微讲解(二)

Django微讲解(二)

Django小白必回三板斧

	与浏览器打交道的视图函数都应该有返回值,常见的就是'HttpResponse','render','redirect',而且Django自
带重启功能,当识别到项目中的代码有变化之后,隔断时间就会自动重启,但是有时候较慢。
# 1.HttpResponse
	主要用于返回字符串类型的数据
    def test(request):
    return HttpResponse('HttpResponse主要用于返回字符串类型的数据')
# 2.reder
	主要用于返回HTML文件,支持模板语法,这个模板语法是Django自己写的
    def test(request):
    return render(request,'test.html',{'name': 'oscar'})
# 3.redirect
	主要用于重定向,括号内可以写其它网站的全称,也可以是自己网站的后缀
    def test(request):
    return redirect('/index/')
    def index(request):
        return HttpResponse('跳转到了这里')

登录功能

	我们之所以可以在浏览器地址中输入不同的路由访问到不同资源,是因为我们在后端框架中提前开设了相应的访问接
口。所以用户才能访问,言外之意就是我们没有接口的话,就不会访问到。
# 1.静态文件
	登录界面需要使用bootstrap,并且还需要自己编写css和js,象这些编写完成后不会经常被修改的与html页面相关
的文件,比如css文件、js文件、图片文件、第三方框架文件等等,都可以称之为是'静态文件',在Django中静态文件需要单
独开设一个文件夹存储,默认叫'static'文件夹,在该文件夹内还可以根据功能的不同继续划分不同的文件,比如css文件夹、
js文件夹等等。
# 2.页面需要获取前端数据并且传递给后端
	我们可以使用from表单,里面有两个参数,'action'控制数据的提交地址,'method'控制请求的提交地址
# 3.静态文件资源访问接口固定配置
	理论上我们应该去路由层开设接口的,如果没有开设静态资源访问接口,我们就访问不到静态文件的资源,当然也不
能使用,所以我们应该去开设接口资源,但是由于静态文件资源使用频率很高,只要是一个web项目都肯定需要,所以Django
为了避免开发者繁琐,提供了静态资源的配置文件,只需要填写固定的配置即可开设资源接口。
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static')
    ]
# 4.配置文件中的两点疑惑
	STATIC_URL = '/static/'  # 作用是什么
    STATICFILES_DIRS = []  # 列表是用来存储多个元素的,这里为什么是列表
    以改地址为例:/static/bootstrap-3.4.1-dist/css/bootstrap.min.css
        /static/是接口前缀,表示具备访问静态文件资源的权限,具备了权限之后会拿着接口前缀后面的文件路径去列表
中的每个文件夹中查找,并且找到一个就结束
# 5.接口前缀动态绑定
	如果templates中有很多HTML文件,并且都需要引入静态资源,所以我们就把接口前缀设置成动态绑定的
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">

request对象方法

	我们写的这一个登录功能,当我们点击提交按钮的时候,就会变成post请求,默认会报403,我们只需要在配置文件
中注释一行代码即可
    MIDDLEWARE = [
    	# 'django.middleware.csrf.CsrfViewMiddleware',
		]
# 1.针对不同的请求执行不同的代码
	我们在执行get请求的时候应该返回一个登录页面,post请求的时候校验用户数据,所以我们就要先获取当前的请
求方式
    request.method方法,会返回纯大写的请求方式字符串,所以我们就可以利用这个方法做一些判断
    def login(request):
    if request.method == 'GET':
        return render(request,'login.html')
    elif request.method == 'POST':
        return HttpResponse('数据提交成功')
# 2.获取post请求提交的普通数据
	request.POST方法,返回的结果一个QueryDict,可以看成字典处理,可以使用get方法拿到数据,但是get方法
拿到的是值列表中的最后一个元素,而不是整个列表,想要拿到整个值列表我们可以使用getlist方法。
    <QueryDict: {'username': ['oscar'], 'password': ['123'], 'hobby': ['111', '222', '333']}>
# 3.获取url后面携带的数据
	request.GET方法,返回的结果一个QueryDict,可以看成字典处理,可以使用get方法拿到数据,但是get方法拿
到的是值列表中的最后一个元素,而不是整个列表,想要拿到整个值列表我们可以使用getlist方法。

pycharm链接MySQL

	pycharm可以充当很多数据库软件的客户端,在pycharm的右上方侧边,或者左下方侧边后一个'database',如果
上述两个地方都没有,就需要下载插件,或者重新安装pycharm。
# 链接数据库
	1.选择数据库
    2.首次链接需要下载驱动
    	download driver...  # 点击download即可
	3.测试链接如果不通过,就需要换驱动重新下载使用

Django链接数据库

	Django虽然自带了一个sqlite3数据库,但是功能很少,仅用于本地测试
# 1. Django链接数据库的默认配置
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
# 2.修改配置
	DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'jp03',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': 'root',
    }
}
# 3.指定模块
	在项目同名的文件夹内的__init__.py或者应用名的文件夹内的__init__.py添加一行固定的代码
    import pymysql
	pymysql.install_as_MySQLdb()

Django orm简介

	ORM:对象关系映射
# 1.ORM特点
	能够让不会写SQL的python程序员使用python语法就可以直接操作数据库,虽然提升了开放效率,但是由于是封装
的SQL语句,需要人为编写SQL调优,有时候可能效率不高
# 2.概念
	表:就相当于类
	一行行数据:类产生的一个个对象
    数据字段:对象的一个个属性

ORM基本操作

	如果需要使用ORM,需要去应用下的models.py中编写代码
# 1.编写类代码
	class Users(models.Model):
    id = models.AutoField(primary_key=True)  # 等价于:id int primary key auto_increment
    name = models.CharField(max_length=255)  # 等价于:name char(255)
    password = models.IntegerField()  # 等价于:password int
# 2.执行数据库迁移命令
	python1 manage.py makemigrations  # 记录操作
    python1 manage.py migrate  # 将操作迁移到数据库
'''
注意:这里的python1是你当前pycharm使用的解释器版本,我们之前讲过多版本共存问题,不同的版本我们设置了不同的名
字,这里要注意一下,不然可能会报错。
首次执行迁移命令,Django还会自动创建一些默认需要使用的表
'''
# 3.表名的特征
	由于Django支持多个应用,为了区分不同应用下可能会出现相同的表明,所以自动加上了应用的前缀
# 4.扩展
	1.表的主键可以不写,ORM会自动帮你写一个名为id的主键
    2.每次修改了跟数据库相关的python代码,都需要重新执行迁移命令

数据操作

# 1.增
def db_data(request):
    from app01 import models 
    res=models.Users.objects.create(name='jason',password=123)
    print(res)  # Users object
    print(res.id)  # 2
    print(res.name)  # jason
    print(res.password)  # 123
# 2.查
def db_data(request):
    from app01 import models
    res = models.Users.objects.filter(name='oscar')  
    print(res)  # <QuerySet [<Users: Users object>]>
    print(res[0])  # Users object
    print(res[0].id)  # 1
    print(res[0].name)  # oscar
    print(res[0].password)  # 123
# 3.改
def db_data(request):
    from app01 import models
    models.Users.objects.filter(id = 1).update(name = 'oscae18')
# 4.删
def db_data(request):
    from app01 import models
    models.Users.objects.filter(id=2).delete()
    return HttpResponse('添加成功')

这里是IT小白陆禄绯,欢迎各位大佬的指点!!!

posted @ 2022-05-11 23:37  陆禄绯  阅读(44)  评论(0编辑  收藏  举报