首页 > 其他分享 >学习笔记-Django框架的使用

学习笔记-Django框架的使用

时间:2022-11-27 18:35:35浏览次数:66  
标签:name 框架 models py request 笔记 django User Django

前言:本博客为技术小白的记录学习过程,有错误或不解的地方请指出 !!!

一.安装和创建项目

1.安装

1.1 命令行下载

pip3 install django==1.11.11  (可以跟镜像地址: -i +镜像地址 )

1.2 测试安装是否成功

django-admin

1.3注意事项:

  1. 计算机名称不能含中文
  2. 项目名称和py文件最好也不要使用中文
  3. django的版本:目前django最新版本为4.X, 本次学习选择1.11.11版.


2.创建django项目
2.1 命令行模式

a.创建django项目

django-admin startproject + 项目名称

b.启动django项目

cd 项目名

python3 ​​manage.py​​ ​runserver

如果python是3.6以后的版本,可能会报错,这是需要修改py文件源码

python安装目录下的lib\site-packages\django\contrib\admin\widgets.py去掉152行后面的逗号.

'%s=%s' % (k, v) for k, v in params.items(),

c.创建app

python ​​manage.py​​ startapp + app的名字

2.2 pycharm 模式

新建项目>>>选择Django >>>选择先前配置的解释器>>>填写app名>>>点击创建

学习笔记-Django框架的使用_数据

2.3 注意事项

django项目创建完成后, 先验证项目是否可以正常启动, 如果报下面这个错误:

TypeError: unsupported operand type(s) for /: 'str' and 'str'

需要修改配置文件

学习笔记-Django框架的使用_字段_02

2.4 django目录结构说明

djangoProject文件夹  #项目同名文件夹

​settings.py​​  # django暴露给用户可以配置的配置文件

​urls.py​​  #路由与视图函数(可以是函数也可是类)对应关系

​wsgi.py​​  #忽略

app01文件夹  #应用(可以有多个)

migrations文件夹  #存储数据库记录相关(类似于操作日志)

admin. py  # django后台管理

​apps.py​​ # 注册app

db.sqlite3  # django自带的小型数据库

​manage.py​​ # django入口文件

templates  #模板文件(存储html文件)

3.修改django默认端口

django默认的端口号是8000,在同一台机器同一时间如果需要运行多个django项目,需要修改端口号

python3 ​​manage.py​​ run server ip:port

pycharm自主修改

学习笔记-Django框架的使用_字段_03

二.项目开发

1. 小白必会三板斧
1.1 HttpResponse

返回字符串

from django.shortcuts import render, HttpResponse, redirect
def func(request):
return HttpResponse('你好啊!')
1.2 rende

返回html页面, 还可以使用末班语法

from django.shortcuts import render, HttpResponse, redirect
def func(request):
lst = [{'username': 'root', 'pwd': '123456'}, {'username': 'admin', 'pwd': '123456'}]
return render(request, 'userinfo.html', {'userinfo_list': lst})
1.3 redirect

重定向

from django.shortcuts import render, HttpResponse, redirect
def func(request):
return redirect('http://www.baidu.com')
2. 静态页面配置
2.1 静态文件

写好之后不会自动动态改变的文件资源, 比如写好的css文件、js文件、图片文件、第三方框架文件。在django项目目录下创建static文件件,默认将所有的静态文件都放在static文件夹中。

2.2 配置

在settings.py文件中,设置静态文件的路径:

STATIC_URL = '/static/'   # 接口前缀
'''
想要访问静态文件资源,必须以static开头;
<script src="/static/js/content.js"></script>
只要书写了接口前缀,就拥有访问STATICFILES_DIRS列表中
所有文件夹内部资料的权限
'''
# 静态文件配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
os.path.join(BASE_DIR, 'static1'),
os.path.join(BASE_DIR, 'static2'),
]
3. request对象方法
  • request.method:获取当前请求的请求方法并且结果是一个纯大写的字符串;
'''
视图函数书写格式
def login(request):
if request.method == 'POST':
return HttpResponse('你是不是傻!')
return render(request, 'login.html')
'''
  • request.POST:获取用户提交post请求过来的基本数据(不含文件),直接看成是字典即可;
  • request.POST.get(): 获取列表最后一个元素;
  • request.POST.getlist(): 获取整个列表;
  • request.GET:获取url问号后面的数据,直接看成是字典即可;
  • request.GET.get(): 获取列表最后一个元素;
  • request.GET.getlist(): 获取整个列表;
  • request.FILES: 获取用户上传的文件数据
  • # form表单如果需要携带文件数据,需要添加参数
<form action='' method='post' enctype='multipart/form-data'>
  • request.FILES.get(): 获取列表最后一个元素;
  • request.FILES.getlist(): 获取整个列表;
4.django连接数据库

django默认使用自带的sqlite3,sqlite3不太好用,因此我们使用pymysql模块进行操作数据

4.1 配置文件修改配置

学习笔记-Django框架的使用_django_04

学习笔记-Django框架的使用_数据_05

5.django orm模块的使用(非常重要)
5.1django orm简介

orm:orm中文名对象关系映射,映射关系入下:

类        -------> 表
对象 -------> 表里面的数据
对象.属性 -------> 表里面字段对应的值
# 缺点:sql封装死了,有时候查询速度较慢
5.2 orm的使用

a . 模型类需要写在应用的models.py文件中

class User(models.Model):
# id int primary key auto_increment
id = models.AutoField(primary_key=True)
# name varchar(32)
name = models.CharField(max_length=32) # CharField必须要加max_length
# age int
age = models.IntegerField()

b. 数据库迁移命令(必须记住)

  • python3 manage.py​ makemigrations:将数据库修改操作记录到migrations文件夹
  • 如果执行命令没反应,就执行python manage.py makemigrations
  • python3 manage.py migrate: 真正的执行数据迁移操作
  • # ​​只要修改了models.py​中跟数据库相关的代码就必须重新执行上述两条命令
  • 快捷方式:点击工具-->点击运行manage.py,然后只需要在终端中输入关键字makemigrations、migrate。

学习笔记-Django框架的使用_字段_06

c. 针对主键字段

  • 如果不指定主键,那么orm会自动创建名为id的主键字段;
  • 如果想自定义主键名,则需要手动自定。

d.字段的增删改

  • 增加字段:在User类中填写需要增加字段的代码即可,然后执行数据库迁移命令。
class User(models.Model):
# id int primary key auto_increment
id = models.AutoField(primary_key=True)
# name varchar(32)
name = models.CharField(max_length=32) # CharField必须要加max_length
# 增加字段age int
age = models.IntegerField(verbose_name='密码', null=Ture) # verbose_name起别名
# 增加字段时,需要设置默认值null=Ture或者default=1。
  • 删除字段:注释掉对应字段的代码,然后执行数据库迁移命令。
    • 修改字段:修改对应字段的代码,然后执行数据库迁移命令。

    e.数据的增删改查

    • 查询数据:在对应的模块导入models模块,然后通过filter方法进行查询
    from app improt models
    def func():
    user.obj = models.User.objects.filter(name='xxx').frist()
    # models.User.objects.filter(name='xxx')相当于select * from user where name='xxx'
    # models.User.objects.filter(name='xxx')的结果是[对象],可以通过索引和frist方法拿到列表中对象。
    # 查询所有数据
    models.User.objects.all() # [obj1,obj2,obj3,......]
    相当于select * from user
      • 添加数据
      from app improt models
      def func():
      user.obj = models.User.objects.create(name='xxx',pwd='abc')
      # models.User.objects.create(name='xxx',pwd='abc')相当于insert into user(name,pwd) values('xxx','abc')
      • 修改数据
      from app improt models
      def func():
      # 第一种修改方式:
      models.User.objects.filter(id='xxx')update(name='yyy',pwd='123')
      # 第二种修改方式:
      edit_dit = models.User.objects.filter(id='xxx').frist()
      edit_dit.name = 'yyy'
      edit_dit.pwd = '123'
      • 删除数据
       models.User.objects.filter(id='xxx').delete()


      标签:name,框架,models,py,request,笔记,django,User,Django
      From: https://blog.51cto.com/u_15879479/5890238

      相关文章

      • Spring Boot笔记(全)
        前言serverlet服务器端小程序,第一代javaweb开发技术,基于java实现了一套用于动态网站的APITomcat\Jetty\Undertow都是Servelet容器,用来管理Servelet类jsp在html页......
      • 20221127 英语笔记
        Word\(\textsf{tent}n.\)帐篷\(\textsf{notice}n.\)布告\(\textsf{recently}adv.\)近期\(\left\{\begin{array}{ll}\textsf{accept}&\textsf{主观意义下(你......
      • typescript笔记
        letu:undefined=undefinedletn:null=null类型注解functiongreeter(person:string){return'Hello,'+person}letuser=[0,1,2]console.log(gre......
      • 介绍27款经典的CSS框架
        利用CSS框架,可以简化你的工作,提高工作效率。CSS框架是一系列CSS文件的集合体,包含了基本的元素重置,页面排版、网格布局、表单样式、通用规则等代码块。下面给你推荐了27......
      • TypeScript学习笔记-06 类、构造器、继承、super
        //使用类来定义一个类classPerson{//readonly开头的表示只读的属性,无法进行修改//定义实例属性readonlyname:string='索隆';//静态属性......
      • 转 若依框架代码生成(前后端分离版本)
        https://www.cnblogs.com/dusucyy/ 若依框架代码生成(前后端分离版本) 1、修改代码生成配置编辑resources目录下的application.yml最下面,代码生成这一块。author:......
      • Eclipse和MyEclipse安装和使用git(egit)图解笔记
        Eclipse、MyEclipse使用git插件(egit)图解在开发Java、JavaEE等相关程序时,我们会用到Eclipse或者MyEclipse,同时使用到git作为版本控制软件,所以我们需要在这些IDE上集成git插......
      • django 定时任务 Error: no such table: django_apscheduler_djangojob
        使用django的定时任务一般出现各种问题例如找不到这个注册表或者urls不存在等etc....版本不兼容我的版本django2.2.8django_apscheduler==0.2.12APScheduler~......
      • 【一些自救】没有什么用的神经网络学习笔记(还没写完)
        即将面临例训而什么也不会的菜鸡惊恐看书发现看到下一章忘记上一章,于是写点笔记拯救什么也不会的自己或许能对你有些帮助,如果没有,这太正常了,忽略它吧 神经网络与卷积......
      • 宝宝精刷题笔记 面试题 02.05. 链表求和
        题目描述给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例1:输入......