Django学习记录

该文详细介绍了Django框架的使用,包括创建项目和应用的步骤,模板语法的运用,请求和响应的处理方法,以及登录功能的实现。同时,文章还讲解了如何在Django中操作数据库,创建和管理数据表。
摘要由CSDN通过智能技术生成

目录

页面创建流程

框架应用

模板语法

请求和响应

实践:登录功能的实现

实践项目完善:数据库

表相关具体步骤:

列相关具体操作:

实际应用:


创建项目基本框架流程

  1. pycharm上下载django框架(setting里找到并下载)
  2. 创建项目:根目录终端命令:django-admin startproject 项目名称
    目录:
    | 项目名
    |____manage.py
    |____项目名文件夹
    |____|____urls.py    路由配置
    |____app名称
    |____|____views.py    常用
    |____|____models.py    操作数据库
    |____|____templates(自建文件夹,存放html文件)
    |____|____static(自建文件夹,存放css,js,image,plugins等)
  3. 创建app 终端命令:python manage.py startapp app名称

页面创建流程

  1. settings.py文件夹里注册app("app名.apps.xxxx")  xxxx=app名+config驼峰命名
  2. urls.py里添加路径  path("index/",views.index.html)
    需要先导入app文件(from app名称 import views)
  3. tempplates里面创建html文件
  4. 运行服务 python manage.py runserver
  5. 打开服务器,访问   /index/页面

框架应用

模板语法

可以写在html文件里,view对其进行渲染(替换)后返回给urls.py

{% for item in list %}

{% endfor %}
#循环语句

{% if var == something %}

{% else %}

{% endif %}
#条件语句

请求和响应

from django.shortcuts import HttpResponse, redirect

def something(request):
    #1获取请求方式(GRT/POST)(浏览器回车请求是get请求)
    print(request.method)

    #2在url上传递一些值(url?n1=123&n2=999)
    print(request.GET)

    #3在请求体中传递数据
    print(request.POST)

    #4[响应]返回 字符串
    return HttpResponse("返回内容")

    #5[响应]读取html内容->渲染(替换)->字符串,返回给浏览器
    return render(request ,'something.html',{"title":"来了"})

    #6[响应]浏览器重定向到其它页面
    return redirect("https://www.bilibili.com/")

实践:登录功能的实现

html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <h1>用户登录</h1>
    <form method="post" action="/login/">
        <input type="text" name="user" placeholder="用户名">
        <input type="text" name="passward" placeholder="密码">
        <input type="submit" value="提交"/>
    </form>
</body>
</html>

views.py

#用户登录
def login(request):
    if request.method == "GET":
        return render(request,"login.html")

    #如果是post请求,获取用户提交的数据
    print(request.POST)
    username = request.POST.get("user")
    password = request.POST.get("passward")
    print(username == 'root' and password == "123")
    if username == 'root' and password == "123":
        # return HttpResponse("登录成功")
        return redirect("https://www.bilibili.com/")

    #return HttpResponse("登录失败")
    retu

会报错

 是因为django的安全保护机制,修改form表单,添加{% csrf_token %}

<form method="post" action="/login/">
        {% csrf_token %}

        <input type="text" name="user" placeholder="用户名">
        <input type="text" name="passward" placeholder="密码">
        <input type="submit" value="提交"/>
    </form>

实践项目完善:数据库

Django开发操作数据库比python直接用简单一点,内部提供了ORM框架

终端安装模块命令:pip install mysqlclient

ORM可以做:

        创建,修改,删除数据库中的表(无法创建数据库)

        操作表中的数据

表相关具体步骤:
  1. 用MySQL自带工具创建数据库
    create database self_django_db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
  2. django连接数据库
    在settings.py里面改
    # DATABASES = {
    #     "default": {
    #         "ENGINE": "django.db.backends.sqlite3",
    #         "NAME": BASE_DIR / "db.sqlite3",
    #     }
    # }
    #修改数据库配置
    DATABASES = {
        'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'self_django_db',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        }
    }

3.django操作表

创建,删除,修改

在models.py文件里

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

"""
相当于
create table login_userinfo(
    id bigint auto_increment primary key,   #自动加
    name varchar(32),
    password varchar(64),
    age int
"""

执行命令:

终端:python manage.py makemigrations        和 python manage.py migrate

这样就可以自动创建表结构,在数据库里可以检验一下。

        补充:

        新增、修改表结构时,由于可能存在已有数据,对于新增的列要指定一下三者之一

                1手动输入一个值        2创建时设置默认值(default = xx) 

                 3允许为空(null = True blank = True)

想要操作数据库时,只需要修改model.py,再运行终端的两条命令即可。

列相关具体操作:
#新增数据
表名.objects.create(字段名=值)

#删除
表名.objects.filter(筛选条件).delete()
#筛选条件:filter(字段=值)     or      all()

#获取数据
#data_list = [行对象,行对象,行对象] QuertSet类型
data_list = 表名.objects.all()

#更新
表名.objects.all(),update(字段 =  值)

实际应用:

再views.py的函数里

#测试ORM
from login import models
def orm(requset):
    #测试orm中的数据
    #创建
    # models.Department.objects.create(title="销售部")
    # models.Department.objects.create(title="IT部")
    # models.Department.objects.create(title="运营部")
    #删除
    #models.Department.objects.all().delete()
    #获取数据
    data_list = models.Department.objects.all()
    print(data_list)
    for obj in data_list:
        print(obj.title)

    return HttpResponse("成功")

只要访问这个页面就会执行这些操作

项目实战:用户管理系统(数据库应用)

views.py中

def info_list(request):
    #1获取数据库中所有信息
    if request.method == "GET":
        data_list = UserInfo.objects.all()
        # print(data_list)

        return render(request,"info_list.html",{"data_list":data_list})

    # 添加用户  get看到页面,post提交写入数据库
    #获取提交数据
    user = request.POST.get("user")
    pwd = request.POST.get("pwd")
    age = request.POST.get("age")

    print()
    #添加到数据库
    UserInfo.objects.create(name=user, password=pwd, age=age)

    return redirect("/info_list/")

def delete(request):
    nid = request.GET.get('nid')
    UserInfo.objects.filter(id=nid).delete()
    return redirect("/info_list/")

html

<div>
    <table border="1">
      <thead>
        <tr>
          <th>ID</th>
          <th>姓名</th>
          <th>密码</th>
          <th>年龄</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody>
        {% for obj in data_list %}
          <tr>
            <td>{{obj.id}}</td>
            <td>{{obj.name}}</td>
            <td>{{obj.password}}</td>
            <td>{{obj.age}}</td>
            <td><a href="http://127.0.0.1:8000/info_del/?nid={{obj.id}}">删除</a></td>
          </tr>
        {% endfor %}
      </tbody>
    </table>

    <br>
    <h1>添加用户</h1>
    <form method="post">
      {% csrf_token %}
      <input type="text" name="user" placeholder="用户名">
      <input type="text" name="pwd" placeholder="密码">
      <input type="text" name="age" placeholder="年龄">
      <input type="submit" value="提交">
    </form>
  </div>

心得:每个页面对应一个函数,有的页面负责有展示html,有的页面负责实现特定功能(没有展示任务)。每个页面可以接收GET 和POST请求,可以根据请求地种类做出不同地反应

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值