三板斧的使用
三个方法
HttpResponse
render
redirect
frpm django.shortcuts import render,HttpResponse,redirect
HttpResponse 返回字符串类型的数据
render 返回HTML页面并且支持传值
redirect 重定向
全局配置文件
SECRET_KEY = 'w1iqa7+d17hb5=t8p640lxp8%nl3)t4fcmjk+@og8(4n*&-xmr'
# 加密的数据,盐
DEBUG = True #调试模式,改为False,页面不会报错
ALLOWED_HOSTS = [‘*’]
INSTALLED_APPS:"""注册应用"""
ROOT_URLCONF:路径,写的路由就去这个路径去寻找
TEMPLATES: 模版
WSGI_APPLICATION:wsigref----上线之后uwigaref
DATABASES:关于mysql数据库
AUTH_PASSWORD_VALIDATORS:密码的认校验
LANGUAGE_CODE:语言---修改中文zh-hanzi
TIME_ZONE = 'Asia/Shanghai'市区
静态文件的配置
静态文件:
类似于HTML文件。css文件,js、文件,图片或第三方框架
总的来说就是可以直接拿来用的都是静态文件
静态文件存在Django框架中的static文件夹中,但是默认情况下是没有这个文件夹的,需要我们手动去创建该文件夹static
静态的HTML一般放在templaes下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<h1 class="text-center">登录页面</h1>
<form action="">
<div class="form-group">
用户名<input type="text" class="form-control">
</div>
<div class="form-group">
密码<input type="password" class="form-control">
</div>
<div class="form-group">
<input type="submit" class="btn-success btn-block" value="登录">
</div>
</form>
</div>
</div>
</body>
</html>
动态解析
使用本地配置文件
"""这个配置是访问静态文件的令牌"""
STATIC_URL = '/dasdasdasdas/'
"""其实就是static文件夹的路径"""
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
动态解析:{% load static %}
{{ }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% load static %}
<script src="{% static 'bootstrap-5.3.0-alpha1/js/jquery.js' %}"></script>
<link rel="stylesheet" href="{% static 'bootstrap-5.3.0-alpha1/css/my_css.css' %}">
<script src="{% static 'bootstrap-5.3.0-alpha1/js/bootstrap.min.js' %}"></script>
</head>
<body>
<div class="container">
<div class="row">
<h1 class="text-center">注册页面</h1>
<form action="">
<div class="form-group">
用户名<input type="text" class="form-control">
</div>
<div class="form-group">
密码<input type="password" class="form-control">
</div>
<div class="form-group">
<input type="submit" class="btn-success btn-block" value="注册">
</div>
</form>
</div>
</div>
</body>
</html>
request对象的方法
<form action="" method="post">
action:
1. 不写,朝当前地址提交
2. 全写
3. 只写后缀
post提交表单,前期先把下面的代码注释掉
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
取出POST请求的数据里的值
可以直接使用字典get取值
def login(request):
print(request.method, type(request.method))
if request.method == "POST":
print(request.POST.get('usernmae')) # 以post请求的表单数据<QueryDict: {'username': ['122'], 'password': ['12']}>
return render(request, 'login.html')
需要取出所有的值时,可以使用getlist取值
print(request.GET)
print(request.GET.get('a'))
print(request.GET.get('b'))
print(request.GET.get('c'))
print(request.GET.getlist('c'))
pycharm链接数据库
三个位置查找数据库相关
1.右侧上方database
2.左下方database
3.配置里面的plugins插件搜索安装
注意:
都没有再没有卸载pycharm重新装
连接成功
Django连接mysql
Django自带的sqlite3是一个小型的数据库,功能比较少,主要是用于本地测试。实际项目都会替换它的
1.修改配置文件中数据库设置成django连接MySQL
2.手动改动将默认mysqldb改为pymysql
django默认用的是mysqldb模块链接MySQL, 但是该模块的兼容性不好 需要手动改为用pymysql链接,需要指定模块
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'NAME': 'db5',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '12345',
'CHARSET': 'utf8',
}
}
2.1 django1.X版本需要在项目目录下或者app目录下的__init__.py编写代码
import pymysql
pymysql.install_as_MySQLdb()
orm介绍
orm:对象映射模型
在Django中操作数据库时,就不在用sql语句了,而是使用面向对象中的语法来操作
缺点:代码封装的程序太高,导致执行效率下降。
类名;就是sql当中的表名
对象:就是一条记录
属性:就是代表一个字段
我们的orm在models.py文件中编写
from django.db import models
class Userinfo(models.Model): # 类似与表名
username = models.CharField(max_length=32)
# 类似于usernmae varcher(32)
password = models.CharField(max_length=32)
输入迁移:python manage.py makemigrations,此时,还不足以创建,只是生成迁移的记录
继续输入 python manage.py migrate,这样就创建完毕了
我们打开navicat查看
这样一个完整的使用Django创建数据库就完成了
Django操作mysql的增删改查
增加:直接在下面接着创建即可
from django.db import models
class Userinfo(models.Model): # 类似与表名
username = models.CharField(max_length=32, verbose_name='用户名')
# 类似于usernmae varcher(32)
password = models.CharField(max_length=32, verbose_name='密码')
salary = models.IntegerField(verbose_name='价格', default=0)
删除:
直接删除就行
from django.db import models
class Userinfo(models.Model): # 类似与表名
username = models.CharField(max_length=32, verbose_name='用户名')
# 类似于usernmae varcher(32)
password = models.CharField(max_length=32, verbose_name='密码')
修改:直接修改
from django.db import models
class Userinfo(models.Model): # 类似与表名
username = models.CharField(max_length=32, verbose_name='用户名')
# 类似于usernmae varcher(32)
password = models.CharField(max_length=32, verbose_name='密码')
salary12 = models.IntegerField(verbose_name='价格', default=0)
查看:使用navicat查看即可
注意,每次修改之后必须要在
terminal中重新输入makemigrations和migrate即可
数据的增删改查(insert,updata,delete,select)
在pycharm中Toots中打开之后的页面就可以无需使用python manage.py 了直接输入makemigrations就可以
后面的[appname]如果不写的话默认是当前目录下的所有的文件
变量的渲染
"""变量的渲染"""
def ab_rander(request):
user_dict = {'username': 'kiki', 'password': 123}
return render(request, 'ab_rander.html', context={'user_dict': user_dict})
“”“当有多个变量时,我们可以使用”“”
return render(request, 'ab_rander.html', locals())
有多个变量时,我们可以使用locals()函数里的所有的局部变量就等同于与
def ab_rander(request):
user_dict = {'username': 'kiki', 'password': 123}
print(locals())
# return render(request, 'ab_rander.html', context={'user_dict': user_dict})
return render(request, 'ab_rander.html', locals())
"""就等于:{'request': <WSGIRequest: GET '/ab_rander/'>, 'user_dict': {'username': 'kiki', 'password': 123}}"""
取值
在HTML文件中使用{{}}来进行取值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.3.0/css/bootstrap.css" rel="stylesheet">
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.3.0/js/bootstrap.js"></script>
</head>
<body>
{{user_dict}}
{{ user_dict.username}}
{{user_dict.password }}
</body>
</html>
得到的结果
用户表单的添删改
修改:
修改分析:1. 先确定修改的值
2.通过主键id值携带到后端
3.通过后端的主键id 去查询数据
4. 把查询到的数据渲染到页面中
5. 把修改之后的数据提交到后端,在进行修改
views文件
def adit(request):
adit_di = request.GET.get('id')
adit_obj = models.Userinfo.objects.filter().first()
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
gender = request.POST.get('gender')
"""第一种修改方式"""
affect_ross = models.Userinfo.objects.filter(id=adit_di).update(username=username,password=password,gender=gender)
print(affect_ross)
return redirect('/userinfo/')
return render(request, 'adit.html', locals())
"""第二种方式"""
adit_obj.username=username
adit_obj.password=password
adit_obj.gender=gender
adit_obj.save() # 进行保存
html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap3.3.7/js/bootstrap.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<h1 class="text-center">这是标题</h1>
<form action="" method="post">
<div class="form-group">
用户名 <input type="text" class="form-control" name="username" value="{{ adit_obj.username}}">
</div>
<div class="form-group">
密码 <input type="password" class="form-control" name="password" value="{{ adit_obj.password }}">
</div>
<div class="form-group">
性别 <input type="gender" class="form-control" name="gender" value="{{ adit_obj.gender }}">
</div>
<div class="form-group">
<input type="submit" class="btn-success btn-block" value="提交">
</div>
</form>
</div>
</div>
</body>
</html>
删除
def delete_1(request):
"""接受前端传输的id值"""
"""第一种方式"""
delete_id = request.GET.get('id')
# models.Userinfo.objects.filter(pk=delete_id).delete()
"""第二种方式"""
delete_obj = models.Userinfo.objects.filter(pk=delete_id).first()
delete_obj.delete()
return redirect('/userinfo/')
添加
def add(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
gender = request.POST.get('gender')
# """操作数据库添加数据"""
# add_info = models.Userinfo.objects.create(username=username, password=password, gender=gender)
# print(add_info)
"""第二种方式"""
add_obj = models.Userinfo(username=username, password=password, gender=gender)
add_obj.save()
return redirect('/userinfo/')
return render(request, 'add.html')