Django框架02


Django必备三件套

Django当中与浏览器打交道的视图函数都应该有返回值,常见的就是下列三个:

HttpResponse、render、redirect。

from django.shortcuts import HttpResponse, render, redirect

def action1(request):
    return HttpResponse("基础信息")

def action2(request):
    return render(request, 'template_page.html', {k:v})
    
def action3(request):
    return redirect('/index/')
  • HttpResponse

内部传入一个字符串参数,返回给浏览器。

def index(request):
    # 业务逻辑代码
    return HttpResponse("OK")
  • render

除request参数外还接受一个待渲染的模板文件和一个保存具体数据的字典参数。

将数据填充进模板文件,最后把结果返回给浏览器。(类似于我们上面用到的jinja2)

def index(request):
    # 业务逻辑代码
    return render(request, "index.html", {"name": "alex", "hobby": ["烫头", "泡吧"]})
  • redirect

主要用于重定向,接受一个URL参数,表示跳转到指定的URL。括号内可以写其他网站的全称,也可以自己网站的后缀。

def index(request):
    # 业务逻辑代码
    return redirect("/home/")

ps:重定向>>>:

重定向:就是通过各种方法将各种网络请求重新定个方向转到其它位置。

Django中的重定向:当视图函数处理完成一个逻辑后,不需要向客户端呈现数据,而是转回到其它页面(可以理解为调用其它的视图函数)。

                          即:视图转向视图,即一个视图跳转到另一个视图;而不是直接返回到模板html。

 Django静态文件

django提供了两种静态文件:

static>>>:这类静态文件用于django项目所需要的静态文件,如js、css、img等等这些静态文件。编写完成后不会经常被修改的与html页面相关的文件。

media>>>:这类静态文件就是用户相关的静态文件了,比如存放用户上传的图像、音视频文件等。

静态文件配置:

STATIC_URL = '/static/'  # HTML中使用的静态文件夹前缀
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),  # 静态文件存放位置
]

静态文件执行过程:

'''
  1.在settings.py中配置
  STATIC_URL = '/static/' # 静态文件请求根路由
  STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static') # 静态文件检索的文件夹
  ]

  2.在项目根目录下创建static文件夹

  3.静态文件就放在static根目录或子目录文件下

  4.获取静态文件:/static/目标文件(可以包含static子文件夹路径)
'''

 request对象方法

  • get和post请求:

get请求和post请求都会触发同一个视图函数login的运行

get请求返回一个登录页面;post请求获取用户数据并校验

  • 获取当前请求方式:

request.method  返回的是纯大写的请求方法字符串

if request.method == 'POST':
return HttpResponse('默默的奋斗才是王道 有了成就才有发言权')
    """默认让视图函数处理get请求"""
return render(request, 'login.html')
  • 获取post请求提交的普通数据:

request.POST >>>结果是一个QueryDict 可以看成字典处理

request.POST.get('username')
request.POST.getlist('hobby')

get方法会拿到值列表中最后一个元素 而不是整个列表
getlist方法会直接拿到整个值列表

  • 如何获取url后面携带的数据:

request.GET >>>结果是一个QueryDict 可以看成字典处理

request.GET.get('info')
request.GET.getlist('cityList')

pycharm连接MySQL

pycharm也可以充当很多数据库软件的客户端。

pycharm右上方侧边 database

pycharm左下方边角 database

上述两个地方都没有,需要下载插件,settings>>>plugins>>>搜索database下载apple即可。

链接数据库:

选择数据库

首次链接需要下载驱动>>>download driver...

测试链接如果不通过,则需要换驱动重新下载使用。
Driver:MySQL 或MySQL for 5.1

Django连接MySQL

django默认自带一个sqlite3数据库,但是功能很少,仅用于本地测试。

默认配置:

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

修改配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'jp_05',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': 'jason123',
    }
}

指定模块:

在Django1版本当中需要指定模块,在项目同名的文件夹内的__init__.py或者应用名的文件夹内的__init__.py,添加一行固定的代码

import pymysql
pymysql.install_as_MySQLdb()

Django orm简介

ORM:对象关系映射。

ORM的特点:能够让不会写SQL的python程序员使用python语法就可以直接操作MySQL;

                      优点:提升了开发效率。

                      缺点:封装了SQL语句,有时候可能效率不高,还需要人为编写SQL调优

ORM的作用:

表》》》类

表中行数据》》》类产生的一个个对象

行中数据字段》》》对象的一个个属性

表单ORM记录的增删改查

# 第一种方式:
user_obj = models.Users.objects.create(name='jack', pwd='333')

# 第二种方式:
user = User(usr='owen', pwd='123')>>>:user.save()

print(user_obj)
print(user_obj.uid)
print(user_obj.name)
print(user_obj.pwd)
models.Users.objects.filter(uid=3).delete()
models.Users.objects.filter(uid=1).update(name='jasonNB')
res = models.Users.objects.filter(name='jason')

print(res) # ]>
print(res[0]) # Users object
print(res[0].uid) # 1
print(res[0].name) # jason
print(res[0].pwd) # 123

相关