一. python下Django框架基本概念
1. 检查python的环境变量配置
 ....../pythonXXX
...../pythonxxxx/Scripts
2. 官方网址
https://www.djangoproject.com/
3. 安装
控制台使用 pip install Django进行安装
pycharm 中的settings 中进行安装
二. 创建Djangao框架项目
1使用模板
2对项目进行修改
在settings.py的文件中,添加 import os
3通过开发服务器
python manage.py runserver
三. Django项目的目录结构
参考文档:https://docs.djangoproject.com/en/3.1/intro/tutorial01/
注意:一个项目中,可以有多个应用
1.建立应用 :python manage.py startapp 应用名
2.建立view视图
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
#创建视图 request请求 response相应
from .models import Users
def hello(request):
    return HttpResponse("hello world")
3.给视图进行url地址映射
A首先在应用中新建一个urls.py的文件
B在此文件中进入django.urls.path模块
from django.urls import path
C添加映射参数 urlpatterns=[]
D进入当前路径下的views.py模块
from.import views
E利用path函数,进行映射
path(“地址”,views.函数),
from django.urls import path
from . import views
urlpatterns=[
    path("hello/",views.hello),
    path("all/",views.findAll),
    path("find/",views.find),
    path("add/",views.add),
    path("up/<int:id>",views.update),
    path("del/<int:id>",views.delete),
]
 
四. Django项目中操作数据库
1.关联mysql
默认操作是sqlite的数据
在setting文件中,配置数据库的链接参数
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'student',
        'USER': 'root',
        'PASSWORD': '591670',
        'HOST': 'localhost',
        'POST': '3306'
    }
}
在__init__.py文件中进行模块的设置
import pymysql
pymysql.install_as_MySQLdb()
2. 操作数据
2.1建立数据库表的模型
在models.py文件中,建立和表结构对应的class
class Users(models.Model):
    id=models.IntegerField(primary_key=True)
    uname=models.CharField(max_length=255)
    upass=models.CharField(max_length=255)
在settings中对子应用模型注册
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'usermng',
    'stumng',
]
将模型和数据库进行关联
在Terminal界面下:
python manage.py migrate
2.2对表格进行查询操作
A查询全部
在views.py中建立查询的函数
def findAll(request):
    rs=Users.objects.all() #集合
    print(rs)
    arr=[]
    for i in rs: #i相当于每一行
        content={'id':i.id,'uname':i.uname,'upass':i.upass}
        arr.append(content)
    return HttpResponse(arr)
在urls.py中给此函数进行映射
from django.urls import path
from . import views
urlpatterns=[
    path("hello/",views.hello),
    path("all/",views.findAll),]
注意 数据库表的名字应该是应用名_模块名 的形式,否则报错
B条件查询
在views.py中建立查询的函数
def find(request):
    rs= Users.objects.filter(uname='aa')
    print(rs)
    arr = []
    for i in rs:  # i相当于每一行
        content = {'id': i.id, 'uname': i.uname, 'upass': i.upass}
        arr.append(content)
    return HttpResponse(arr)
在urls.py中给此函数进行映射
from django.urls import path
from . import views
urlpatterns=[
      path("find/",views.find),
]
注意 数据库表的名字应该是应用名_模块名 的形式,否则报错
C添加
def add(request):
    user=Users()
    user.uname="456"
    user.upass="456"
    user.save()
    return HttpResponse("ok")
#路径映射
from django.urls import path
from . import views
urlpatterns=[
    path("hello/",views.hello),
    path("all/",views.findAll),
    path("find/",views.find),
    path("add/",views.add),
    path("up/<int:id>",views.update),
    path("del/<int:id>",views.delete),
]
D修改
def update(request,id):
    user=Users.objects.get(id=id)
    user.upass='111'
    user.save()
    return HttpResponse("okk")
    
     建立映射 path("up/<int:id>",views.update),
E删除
def delete(request,id):
    user = Users.objects.get(id=id)
    user.delete()
    return HttpResponse("okk")
    
   建立映射 path("del/<int:id>",views.delete),
一。模板语言
将Python嵌入HTML
- 
变量 {{}}
 
语法: {{变量}}
作用:在指定位置显示变量中的数据
- 
过滤器 |
 
语法:{{变量|YYY|ZZZ}}
作用:进行筛选并操作
例如:{{name|lower}} 将文本转成小写
 {{list|join:“,”}} 使用逗号连接列表元素
{{bio|truancatewords:30}} 显示bio变量的前30个词
 
 
| 常用过滤器 | 说明 | 例 | 
| default | 
空或False时提供默认值 | 
{{value|default:"空"}} | 
| length | 
返回长度 | 
{{value|length}} | 
| filesizeformat | 
文件大小格式化 | 
{{value|filesizeformat}} | 
 
- 
标签
 
语法: {% 开始 标签 %} {% 结束标签 %}
作用:完成指定功能
 
 
| 开始 标签 | 结束标签 | 说明 | 
| {% for 变量 in 集合%} | 
{% endfor %} | 
循环 | 
| {% if 变量 %}{% elif 变量 %}{% else %} | 
{% end if %} | 
条件 | 
| {% extends "页面名.html" %} | 
  | 
继承模板 | 
| {% block 名%} | 
{% endblock%} | 
留出子模板填充内容的位置 | 
 
二。学生管理系统的实例 (用户管理)
- 
添加用户的功能
 
![img]()
![img]()
![img]()
![img]()
 
2.查询全部信息
建立infos.html页面
| 
 {#<!DOCTYPE html>#} {#<html lang="en">#} {#<head>#} {#    <meta charset="UTF-8">#} {#    <title>Title</title>#} {#</head>#} {#<body>#} {% extends "base2.html" %} {% block right%} 
<form action="../find/" method="post" name="frmsearch">     {% csrf_token %} 
    <p><label>用户名:</label><input type="text" name="kd">     <input type="submit" value="查找">     </p> </form> 
<table border="1">     <tr>         <th>序号</th>         <th>用户名</th>         <th>密码</th>         <th>操作</th>     </tr>     {% for item in uList %} 
         <tr>              <td>{{ item.id }}</td>              <td>{{ item.uname }}</td>              <td>{{ item.upass }}</td>              <td>                   <a href="../showup/{{ item.id }}">修改</a>                   <a href="../del/{{ item.id }}">删除</a>              </td> 
         </tr>     {% endfor %} 
</table> <a href="../showAdd/">添加用户</a> 
{% endblock %} {#</body>#} {#</html>#} {% block left %}     <ul>         <li><a href="../showAdd/">添加用户</a></li>         <li><a href="../all/">查看用户</a></li>         <li><a href="../index/">首页</a> </li>     </ul> 
{% endblock %} 
  
 | 
 
修改msg.html
<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title> </head> <body> <h2>{{ msg }}</h2> <h3><a href="../all/">查看信息</a> </h3> </body> </html> 
 | 
 
修改views中的代码
def findAll(request):     rs=Users.objects.all() #jihe     arr=[]     for i in rs: #i相当于每一行         content={'id':i.id,'uname':i.uname,'upass':i.upass}         arr.append(content)     context={'uList':arr}     return render(request,"infos.html",context) 
 | 
urls.py代码
from django.urls import path from . import views urlpatterns=[     path("all/",views.findAll),     path("find/",views.find),     path("add/",views.add),     path("up/",views.update),     path("del/<int:id>",views.delete),     path("showAdd/",views.showAddUserPage),     path("showup/<int:id>",views.showUp),     path("t1/",views.t1),     path("index/",views.index) ] 
 | 
条件查询:
.filter(列名_key="值") 或者 .fiter(**字典)
_key:
不添加任何的key,列名=值 精确查找
列名_contains:包含,模糊查询
列名_in:符合其中之一就可以,例如 :age_in=[3,6,9]
列名_range:在一个范围 例如 score_range=(90,100)
列名_gt:大于  gte: 大于或等于   It 小于   Ite 小于或等于
starswith 开头是  endswith 结尾是
def find(request):     if request=="GET":         keywords=request.GET.get("kd")     else:         keywords=request.POST.get("kd")
      rs= Users.objects.filter(uname__contains=keywords)     arr = []     for i in rs:  # i相当于每一行         content = {'id': i.id, 'uname': i.uname, 'upass': i.upass}         arr.append(content)     context = {'uList': arr}     return render(request, "infos.html", context) 
 | 
删除信息:
def delete(request,id):     user = Users.objects.get(id=id)     user.delete()     return HttpResponseRedirect("../all/") 
 | 
<a href="../showup/{{ item.id }}">修改</a> <a href="../del/{{ item.id }}">删除</a>
 | 
更改信息:
<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title> </head> <body> <form action="../up/" method="post" name="frmAddUser">      {% csrf_token %}     <input type="hidden" name="id" value="{{ one.id }}">     <p>         <label>uname: </label><input type="text" name="uname" value="{{ one.uname }}" readonly>     </p>      <p>         <label>upass: </label><input type="password" name="upass">     </p>     <p>         <input type="submit" value="修改">         <a href="../all/">返回</a>     </p>
  </form> </body> </html> 
 | 
def showUp(request,id):     i= Users.objects.get(id=id)     temp={'id': i.id, 'uname': i.uname, 'upass': i.upass}     context={'one':temp}     return render(request,"up.html",context)
  def update(request):     if request.method=="POST":         sid=request.POST.get('id')         upass=request.POST.get('upass')     user=Users.objects.get(id=sid)     user.upass=upass     user.save()     context = {'msg': "修改成功"}     return render(request, 'msg.html', context) 
 | 
from django.urls import path from . import views urlpatterns=[     path("all/",views.findAll),     path("find/",views.find),     path("add/",views.add),     path("up/",views.update),     path("del/<int:id>",views.delete),     path("showAdd/",views.showAddUserPage),     path("showup/<int:id>",views.showUp),     path("t1/",views.t1),     path("index/",views.index) ] 
 | 
  | 
python中模板继承:
模板页
  <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title>     <style>         body{             width: 900px;             margin: 0px auto;         }         #top{             height: 100px;             background-color: antiquewhite;
          }         #left{             width: 20%;             background-color: antiquewhite;             float: left;             height: 400px;         }         #right{             width: 80%;             background-color: antiquewhite;             float: left;             height: 400px;         }
      </style> </head> <body>    <div id="top">        <h2>学生管理系统</h2>    </div>    <div id="left">        {% block left %}            <ul>                <li><a href="http://127.0.0.1:8000/stumng/all/">学生管理</a> </li>                <li><a href="http://127.0.0.1:8000/usermng/all/">用户管理</a> </li>            </ul>        {% endblock %}    </div>     <div id="right">        {% block right %}            <h1>欢迎使用学生管理系统</h1>        {% endblock %}    </div>
 
  </body> </html> 
 | 
子模版页
 
  {% extends "base2.html" %} {% block right%}
  <form action="../find/" method="post" name="frmsearch">     {% csrf_token %}
      <p><label>用户名:</label><input type="text" name="kd">     <input type="submit" value="查找">     </p> </form>
  <table border="1">     <tr>         <th>序号</th>         <th>用户名</th>         <th>密码</th>         <th>操作</th>     </tr>     {% for item in uList %}
           <tr>              <td>{{ item.id }}</td>              <td>{{ item.uname }}</td>              <td>{{ item.upass }}</td>              <td>                   <a href="../showup/{{ item.id }}">修改</a>                   <a href="../del/{{ item.id }}">删除</a>              </td>
           </tr>     {% endfor %}
  </table> <a href="../showAdd/">添加用户</a>
  {% endblock %} {#</body>#} {#</html>#} {% block left %}     <ul>         <li><a href="../showAdd/">添加用户</a></li>         <li><a href="../all/">查看用户</a></li>         <li><a href="../index/">首页</a> </li>     </ul>
  {% endblock %} 
 | 
 最终版
 views
 
  from django.shortcuts import render
  # Create your views here. from django.http import HttpResponseRedirect,HttpResponse #创建视图 request请求 response相应 from .models import Users #显示前台页面 def showAddUserPage(request):     return render(request,"adduser.html")
 
  def add(request):     user=Users()     if request.method=='POST':         user.uname=request.POST.get("uname")#和models数据库名一样         user.upass= request.POST.get("upass")     else:         user.uname = request.GET.get("uname")  # 和models数据库名一样         user.upass = request.GET.get("upass")     temp=user.save()     print(temp)     context={'msg':"添加成功"}     return render(request,'msg.html',context)
      # user.uname="456"     # user.upass="456"     # return HttpResponse("ok")
 
 
 
 
  def hello(request):     return HttpResponse("hello world")
  def findAll(request):     rs=Users.objects.all() #jihe     arr=[]     for i in rs: #i相当于每一行         content={'id':i.id,'uname':i.uname,'upass':i.upass}         arr.append(content)     context={'uList':arr}     return render(request,"infos.html",context)
  def find(request):     if request=="GET":         keywords=request.GET.get("kd")     else:         keywords=request.POST.get("kd")
      rs= Users.objects.filter(uname__contains=keywords)     arr = []     for i in rs:  # i相当于每一行         content = {'id': i.id, 'uname': i.uname, 'upass': i.upass}         arr.append(content)     context = {'uList': arr}     return render(request, "infos.html", context)
  def showUp(request,id):     i= Users.objects.get(id=id)     temp={'id': i.id, 'uname': i.uname, 'upass': i.upass}     context={'one':temp}     return render(request,"up.html",context)
  def update(request):     if request.method=="POST":         sid=request.POST.get('id')         upass=request.POST.get('upass')     user=Users.objects.get(id=sid)     user.upass=upass     user.save()     context = {'msg': "修改成功"}     return render(request, 'msg.html', context)
  def delete(request,id):     user = Users.objects.get(id=id)     user.delete()     return HttpResponseRedirect("../all/")
  def t1(request):     return render(request,"t1.html")
  def index(request):     return render(request,"index.html") 
 | 
from django.urls import path from . import views urlpatterns=[     path("all/",views.findAll),     path("find/",views.find),     path("add/",views.add),     path("up/",views.update),     path("del/<int:id>",views.delete),     path("showAdd/",views.showAddUserPage),     path("showup/<int:id>",views.showUp),     path("t1/",views.t1),     path("index/",views.index) ]
 
  urls 
 | 
from django.db import models
  # Create your models here. #数据库模型 class Users(models.Model):     id=models.IntegerField(primary_key=True)     uname=models.CharField(max_length=255)     upass=models.CharField(max_length=255)
 
 
  models  
 | 
<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title> </head> <body> <form action="../add/" method="post" name="frmAddUser">      {% csrf_token %}     <p>         <label>uname: </label><input type="text" name="uname">     </p>      <p>         <label>upass: </label><input type="password" name="upass">     </p>     <p>         <input type="submit" value="添加">     </p>
  </form> </body> </html> 
 | 
<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title>     <style>         body{             width: 900px;             margin: 0px auto;         }         #top{             height: 100px;             background-color: antiquewhite;
          }         #left{             width: 20%;             background-color: antiquewhite;             float: left;             height: 400px;         }         #right{             width: 80%;             background-color: antiquewhite;             float: left;             height: 400px;         }
      </style> </head> <body>    <div id="top">        <h2>学生管理系统</h2>    </div>    <div id="left">        {% block left %}            <ul>                <li><a href="http://127.0.0.1:8000/stumng/all/">学生管理</a> </li>                <li><a href="http://127.0.0.1:8000/usermng/all/">用户管理</a> </li>            </ul>        {% endblock %}    </div>     <div id="right">        {% block right %}            <h1>欢迎使用学生管理系统</h1>        {% endblock %}    </div>
 
  </body> </html> 
 | 
 index 
  
  
{% extends "base2.html" %}
  
 | 
 
{#<!DOCTYPE html>#} {#<html lang="en">#} {#<head>#} {#    <meta charset="UTF-8">#} {#    <title>Title</title>#} {#</head>#} {#<body>#} {% extends "base2.html" %} {% block right%}
  <form action="../find/" method="post" name="frmsearch">     {% csrf_token %}
      <p><label>用户名:</label><input type="text" name="kd">     <input type="submit" value="查找">     </p> </form>
  <table border="1">     <tr>         <th>序号</th>         <th>用户名</th>         <th>密码</th>         <th>操作</th>     </tr>     {% for item in uList %}
           <tr>              <td>{{ item.id }}</td>              <td>{{ item.uname }}</td>              <td>{{ item.upass }}</td>              <td>                   <a href="../showup/{{ item.id }}">修改</a>                   <a href="../del/{{ item.id }}">删除</a>              </td>
           </tr>     {% endfor %}
  </table> <a href="../showAdd/">添加用户</a>
  {% endblock %} {#</body>#} {#</html>#} {% block left %}     <ul>         <li><a href="../showAdd/">添加用户</a></li>         <li><a href="../all/">查看用户</a></li>         <li><a href="../index/">首页</a> </li>     </ul>
  {% endblock %}
 | 
 
<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title> </head> <body> <h2>{{ msg }}</h2> <h3><a href="../all/">查看信息</a> </h3> </body> </html> 
 | 
 
<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title> </head> <body> <form action="../up/" method="post" name="frmAddUser">      {% csrf_token %}     <input type="hidden" name="id" value="{{ one.id }}">     <p>         <label>uname: </label><input type="text" name="uname" value="{{ one.uname }}" readonly>     </p>      <p>         <label>upass: </label><input type="password" name="upass">     </p>     <p>         <input type="submit" value="修改">         <a href="../all/">返回</a>     </p>
  </form> </body> </html> 
 |