学习笔记-Django框架的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记-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框架的使用_字段_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 actinotallow= method=post enctype=multipart/form-data>
  • request.FILES.get(): 获取列表最后一个元素;
  • request.FILES.getlist(): 获取整个列表;
4.django连接数据库

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

4.1 配置文件修改配置

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

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

三.问题汇总

1.form表单提交报错CSRF verification failed. Request aborted.

解决方法:在from标签内容,添加% csrf_token %

    <form action="" method="post" >
% csrf_token %
<p>书名:<input type="text" name="book_name" value= edit_obj.book_name ></p>
<p>作者:<input type="text" name="book_writer" value= edit_obj.book_writer ></p>
<input type="submit" value="提交">
</form>


以上是关于学习笔记-Django框架的使用的主要内容,如果未能解决你的问题,请参考以下文章

Python-Django框架学习笔记——第二课:Django的搭建

基于Django Web框架(Python)实现简单的学生管理系统 -------学习笔记

框架Django

Django_数据库配置_ORM框架(个人学习笔记)

Django_数据库配置_ORM框架(个人学习笔记)

Django学习笔记(上)