Django

项目文件功能

终端操作:
pip freeze 查看该项目部署的包
pip install django 安装django
python manage.py runserver

package_name
	__init__.py # 
	asgi.py		# 和wsgi.py一起,接收网络请求的,不用修改,Django接收异步的
	settings.py	# 项目的配置文件,eg:数据库连接信息、注册app等,常操作
	urls.py		# 全部的URL和函数的对应关系,常操作
	wsgi.py		# 和asgi.py一起,接收网络请求的,不用修改,Django接收同步的
manage.py  		# 项目管理的脚本,不要修改,eg:启动、创建app、数据库管理等

在确保项目下有django的前提下使用python manage.py startapp index可以为项目添加需要的app

index
	migrations	 	# 数据库变更记录,会自动生成文件
	__init__.py		#
	admin.py		# 固定的不用动,django默认提供的后台管理,但实际开发不常用
	apps.py			# 固定的不用动,app启动相关
	models.py		# 对数据库进行操作,这里不用SQL写了,Django封装了ORM供调用
	tests.py		# 固定的不用动,用来单元功能测试的,个人小项目可以不用管
	views.py		# 撰写视图函数(得我们自己写的)

快速上手

① 修改settings.py

在INSTALLED_APPS中,添加一个’ ',准备添加新app的内容
‘ ’ 中的内容时调用新app里面的类的内容,如:index.apps.IndexConfig

② 修改urls.py 修改映射

path('index/', views.index)这句的映射关系即为访问http://www.xxxx.com/index时,触发的函数是名为index的app下的views.py中的index函数

③ 相应app下的views.py

④ 运行django项目

命令行运行:python manage.py runserver

完成之后访问localhost:8000/index/

创建新的页面

首先views.py中撰写相应函数
其次urls.py中定义URL和函数的对应关系

# 举例
# views.py中添加
def user_add(request):
    return HttpResponse("用户增加")

def user_delete(request):
    return HttpResponse("用户删除")

# urls.py中添加
path('user_add/', views.user_add),
path('user_delete', views.user_delete)

templates

首先在index下创建templates文件夹,并在templates下创建html文件
templates为固定放html文件

static

index包下创建static文件夹
static为固定放图片、css、js
static下创建css、js、img文件夹

# python新格式

{% load static %}  # html文件开头
.
.
.
<img src="{% static 'img/1.png' %}"> #正常img的位置用这个

render() 传网页

其次设置函数与url对应关系

# url.py中
path('my/html', views.my_html),

# views.py中
def my_html(request):
    return render(request, "my_html.html")

django模板语法

前端调后端

tender()的第三个参数,可以给views.py传递数据,必须是字典

# views.py
def look(request):
	a_name = "whx"
	b_list = ["666", 12, "牛"]
	return render(request, "learn.html", {"a" : a_name, "b" : b_list})

# urls.py
path('look', views.look),

# learn.html
<body>
	<div>{{ a }}</div>
	<div>{{ b }}</div>
</body>

索引

django中通过 . 调用

<body>
	<div>{{ a }}</div>
	<div>{{ b }}</div>
	# 索引
	<div>{{ b.0 }}</div>  # pyhton中为 b[0]
	<div>{{ b.1 }}</div>  # pyhton中为 b[1]
	<div>{{ b.2 }}</div>  # pyhton中为 b[2]
</body>

for

一个for对应一个endfor

{% for a in b %}
<div>{{ a }}</div>
{% endfor %}

if

一个if对应一个endif

{% if b == "666" %}
<div>{{ b }}</div>
{% else %}
<span>{{ b }}</span>
{% endif %}

上述把list换成dict

b.keys
b.values
b.items

request&response

request

# request
def login(request):
    print(request.method)  # 控制台打印前端访问方法 GET/POST
    print(request.GET)	   # 控制台打印URL传的参数
    print(request.POST)	   # 控制台打印
    return render(request, "login.html")

response

views.py中函数所返回的

from django.shortcuts import render, HttpResponse, redirect

def login(request):
	name = "whx"
    return render(request, "login.html", {"a" : name}) # render() 前端调后端
    # return Httpresponse("666") # 返回内容
    # return redirect("https://www.baidu.com/") # 重定向

{% csrf_token %}

安全机制

ORM(数据库操作)

安装mysqlclient

pip install mysqlclient

ORM会帮我们
增删改查数据库中的表(不用写SQL语句)【但数据库你得自己建】
操作表中数据,即增删改查表中记录(不用写SQL语句)

创建数据库

django连接数据库

settings.py文件中配置连接参数

'default': {
    'ENGINE': 'django.db.backends.mysql',	# Django的引擎,还可以用Oracle等
    'NAME': 'name',	# 数据库名
    'USER': 'root',		# 用户名
    'PASSWORD': 'xxxxxx',	# 密码
    'HOST': 'localhost',			# 数据库服务器地址
    'PORT': 3306,		# 端口号(MySQL默认3306)
}

django操作表

model.py写一个类就是创建一个表

# 在MySQL中创建对应的一个表
class UserInfo(models.Model):
    # 创建字段
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

ORM会帮我们把这段代码转化成SQL语句

create table index_userinfo(  # 表明为app名_类名
    id bigint auto_increment primary key,		【django创建表自带自增字段】
    name varchar(32),
    password varchar(64),
    age int,
);

把model.py中的类注释掉,运行,即可删除

1.增加字段
①直接在类中添加字段

sex = models.CharField(max_length=2)

直接运行,会有两个选项,让你添加默认值

②如果不想添加默认值,可以设为null

nickname = models.CharField(max_length = 32, null = True)

2.修改字段
直接将字段名称改为想修改的即可,运行

3.删除字段
直接注释

4.表内增删改查
都需要写在views.py中
①增

类名.objects.create("")  # 类名为前面model.py中的类名
# 例
TeacherInfo.objects.create(name = "www")

②删

类名.objects.filter().delete()# 筛选内容,再删除
类名.objects.all().delete()# 删除表内全部内容
# 例
TeacherInfo.filter(id = 1).delete()

③改

类型.objects().all().update():修改全部
类型.objects().filter().update():筛选内容,再修改
# 例
TeacherInfo.objects.filter(id = 1)(name = "hhh")

④查

类名.objects.all():查询表中所有数据
类名.objects.filter():筛查相应的数据
# 例
data = TeacherInfo.objects.all()
for d in data:
	print(p.id, p.name)

运行

python manage.py makemigrations

python manage.py migrate

常见参数位

常见参数

max_length		# CharField()用
verbose_name	# 注释
primary_key		# 主键
default			# 默认值
max_digits		# DecimalField()用
decimal_places	# DecimalField()用,显示小数点后几位
null&blank		# 组合使用,null=True blank=True
choices			# 元组,约束

外键

名字 = models.ForeignKey(to="类名", to_field="id")
# 一个a对应对个b,外键设置在b类中,to="a的类名"

级联删除

on_delete=models.CASCADE

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值