django(二)

django小白必会三板斧

与浏览器打交道的视图函数都应该有返回值 常见的就是下列三个
HttpResponse
主要用于返回字符串类型的数据
render
主要用于返回html文件 并且支持模板语法(django自己写的)
redirect
主要用于重定向 括号内可以写其他网站的全称 也可以自己网站的后缀

补充:django自带重启功能,当识别到项目中代码有变化之后,隔段时间会自动重启,但是有时候较慢。

每个试图函数第一个参数都是request(HttpRequest),服务器接收到http协议的请求后,会根据报文创建HttpRequest对象,视图函数的第一个参数是HttpRequest对象。HttpRequest对象包含当前请求URL的一些信息。

def index(request):
    print(request)  # <WSGIRequest: GET '/index'>
    return HttpResponse('你们好呀')

登录功能

我们之所以可以在浏览器地址栏中输入不同的路由访问到不同的资源
是因为我们在后端框架中提前开设了相应的访问接口所以用户才能访问
言外之意就是我们没有开设接口 那么肯定访问不到

1.开设接口返回登录界面
2.登录界面需要使用bootstrap并且还需要自己编写css和js
静态文件
3.页面需要获取前端用户数据并且传递给后端
form表单
action参数:控制数据的提交地址
method参数:控制请求的提交方式
4.访问登录页面
静态文件全部显示资源不存在
http://127.0.0.1:8000/static/bootstrap-3.3.7-dist/css/bootstrap.min.css
因为我们并没有开设静态资源访问的接口
5.开设静态资源的访问接口
理论上应该自己去路由层开设接口资源,但是由于静态文件资源使用频率很高。
只要是一个web项目都肯定需要,所以django为了避免开发者繁琐,提供了静态资源的配置文件,只需要填写固定的配置即可开设资源接口。
settings.py
静态文件资源访问接口固定配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
html页面路径
/static/mycss.css
6.配置文件中的两点疑惑

STATIC_URL = '/static/'  
STATICFILES_DIRS = []  

以该址为例:/static/bootstrap-3.3.7-dist/css/bootstrap.min.css
/static/是接口前缀 表示具备访问静态文件资源的权限
具备了权限之后会拿着接口前缀后面的文件路径去列表中每个文件夹中查找
bootstrap-3.3.7-dist/css/bootstrap.min.css
找到一个就结束
比如 static和static1里面都有a.txt 那么只会拿到static中的

7.接口前缀动态绑定
如果templates中有很多html文件并且都需要引入静态资源
如果把接口前缀修改了,页面无法加载资源,需要用接口前缀动态绑定

{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">

静态文件

编写完成后不会经常被修改的与html页面相关的文件
css文件、js文件、图片文件、第三方框架文件(bootstrap)
上述文件都可以称之为是'静态文件'
在django中静态文件单独开设一个文件夹存储,默认叫static文件夹
在该文件夹内还可以根据功能的不同继续划分不同的文件
css文件夹、js文件、img文件夹、others文件夹

request对象方法

提交post请求 默认会报403
前期不需要过多考虑 直接去配置文件中注释一行即可

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

1.get请求和post请求都会触发同一个视图函数login的运行
如何针对不同的请求执行不同的代码
get请求返回一个登录页面
post请求获取用户数据并校验
2.获取当前请求方式
request.method 返回的是纯大写的请求方法字符串
由于get请求更加常见,post请求次之,所以还可以按照下列方式简写
if request.method == 'POST':
return HttpResponse('默默的奋斗才是王道 有了成就才有发言权')
默认让视图函数处理get请求
return render(request, 'login.html')
3.获取post请求提交的普通数据
request.POST 结果是一个QueryDict 可以看成字典处理
request.POST.get('username')
request.POST.getlist('hobby')

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

4.如何获取url后面携带的数据
request.GET 结果是一个QueryDict 可以看成字典处理
request.GET.get('info')
request.GET.getlist('cityList')

特征与上述request.POST一致 使用场景也很多
https://www.lagou.com/wn/jobs?kd=python&isSchoolJob=1&city=上海&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简介

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

orm基本使用

如果需要使用ORM 需要去应用下的models.py中编写代码
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
如果不设置主键,django会在和数据库交互之前主动替我们设置好主键id

2.执行数据库迁移命令
python3 manage.py makemigrations # 记录操作,会在应用文件夹下的migrations文件夹中产生一个记录响应命令的
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 @   小金同学要加油  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示