0
点赞
收藏
分享

微信扫一扫

学习笔记-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框架的使用_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框架的使用_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()


      举报

      相关推荐

      0 条评论