基础操作
引入CSS
在setting文件中加入
STATIC_URL = 'static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static/'),
)
创建项目
"D:\PythonProject\python_design\venv\Scripts\django-admin.exe" startproject mysite
基础介绍
创建APP
终端输入:
python manage.py startapp xxx
APP结构:
更改APP名称:
1、根据pycharm的提示更改所有与原app相关的名称。
2、在setting.py中更改static目录。通过在项目的根目录下运行以下命令即可:
mkdir static
或者是修改为本地目录后运行一遍,再修改为标准形式即可:
修改后运行:STATICFILES_DIRS = [ 'D:\\xxx\\xxx\\static', ]
修改回再次运行:STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]
快速编写:setting.py配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.app.App01Config'
]
编写url.pyl:
urlpatterns = [
path('index/', views.index),
path('user_add/', views.user_add),
]
编写view.py:
def index(request):
return render(request, "index.html")
def user_add(request):
return render(request, "user_add.html")
启动:
python manage.py runserver
django结构:
使用django建立网页需要:
{% csrf_token %}
原理:在django中我们需要在templates的form中加入{%csrf_token%}这串内容,它的作用是当我们get表单页面时,服务器返回页面的同时也会向前端返回一串随机字符,post提交时服务器会验证这串字符来确保用户是在服务端返回的表单页面中提交的数据,防止有人通过例如jquery脚本向某个url不断提交数据,是一种数据提交的验证机制。
ORM功能:操作数据库的表,无法创建数据库
创建数据表:
修改models.py文件,增加sql中表的内容相关代码。
class UserInfo(models.Model):
name = models.CharField(max_length=20)
comment = models.TextField()
执行命令:
python manage.py makemigrations
python manage.py migrate
如果需要再创建modle,运行代码就可以。
orm连接数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database_name',
'USER': 'root',
'PASSWORD': 'root123',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
注释掉不想要的行
class UserInfo(models.Model):
name = models.CharField(max_length=20)
password = models.CharField(max_length=20)
# age = models.IntegerField()
运行:
python manage.py makemigrations
python manage.py migrate
添加列:选择1,2两种方式添加默认值。
python manage.py makemigrations
下图是手动输入默认值(选择2,回车后会退出,再写入下面的默认值)
之后再运行下面代码,就会将新的列插入进来:python manage.py migrate
允许为空
class UserInfo(models.Model):
name = models.CharField(max_length=20)
password = models.CharField(max_length=20)
age = models.IntegerField()
# 新增列
size = models.IntegerField(default=2)
# 允许为空
data = models.IntegerField(null=True, blank=True)
增添数据:
class UserInfo(models.Model):
name = models.CharField(max_length=20)
password = models.CharField(max_length=20)
age = models.IntegerField(default=2)
class Department(models.Model):
title = models.CharField(max_length=16)
# 新建数据
# 本质:insert into app01_department(title)values()
Department.objects.create(title="销售部")
UserInfo.objects.create(name="bruce",password="123",age="18")
在Django建url访问操作数据表
新增url(编辑urls.py文件)
from django.urls import path
from app01 import views
urlpatterns = [
# path('admin/', admin.site.urls),
# path('index_app/', views.index_app),
# path('user_list/', views.user_list),
# path('tpl/', views.tpl),
# path('something/', views.something),
# path('login/', views.login),
path('orm/', views.orm),
]
编辑views.py
from app01.models import Department
def orm(request):
# 新建数据
Department.objects.create(title="123")
return HttpResponse("成功")
删除数据(还是在views.py文件中)
def orm(request):
# 新建数据
Department.objects.create(title="123")
#删除数据
Department.objects.filter(id=2).delete()
# 全部删除
Department.objects.all().delete()
return HttpResponse("成功")
获取特定数据
UserInfo.objects.filter(name = 'ETF回本之路').values('id')
获取所有数据
UserInfo.objects.all()
Django案例
思路
写URL:
path('web/', views.web),
写函数:
def web(request):
render:属于渲染函数!!!
Django模板继承
模板:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
模板自己的style
</style>
<link rel="stylesheet" href="/static/plugins/bootstrap-5.3.0/css/bootstrap.css">
</head>
<body>
<div class="header" >
模板自己的header
</div>
<div>
{%block content%} {%endblock%}
</div>
</body>
</html>
使用模板:
{%extends "layout.html"%}
{%block css%}
<style></style>
<link>
{%endblock%}
{%block content%}
<div>插入需要的html即可</div>
{%endblock%}
{%block js%}
<script></script>
{%endblock%}
Django的Models组件
创建数据库的,用于models.py
class UserInfo(models.Model):
name = models.CharField()
uid = models.IntegerField()
comment = models.TextField()
Django的ModelsForm组件
用于view.py中的字段代替
models.py文件
from django.db import models
# Create your models here.
class Department(models.Model):
"""部门表"""
title = models.CharField(max_length=32, verbose_name='标题')
class UserInfo(models.Model):
"""员工表"""
name = models.CharField(max_length=16, verbose_name="姓名")
password = models.CharField(max_length=64, verbose_name="密码")
age = models.IntegerField(verbose_name="年龄")
account = models.DecimalField(verbose_name="账户余额", max_digits=10, decimal_places=2, default=0)
create_time = models.DateTimeField(verbose_name="入职时间")
depart = models.ForeignKey(to="Department", to_field="id", on_delete=models.CASCADE, verbose_name="部门")
gender_choices = (
(1, "男"),
(2, "女"),
)
gender = models.SmallIntegerField(choices=gender_choices,verbose_name="性别")
views.py文件
class MyForm(ModelForm):
class Meta:
field = ["name", "password", "age"]
def user_add(request):
if request.method == "GET":
form = MyForm()
return render(request, "user_add.html", {"form": form})
HTML中使用:
<form method="post">
{{ form.id }}
{{ form.Uid }}
{{ form.name }}
{{ form.comment }}
</form>
Django搜索
搜索特定条件
UserInfo.objects.filter(id=uid)
大于
UserInfo.objects.filter(id__gt=uid)
小于
UserInfo.objects.filter(id__lt=uid)
字符串以xxx开头或结尾查找或包含的查找:
UserInfo.objects.filter(id__startwith=xxx)
UserInfo.objects.filter(id__endwith=xxx)
UserInfo.objects.filter(id__icontent=xxx)
多条件搜索:
from django.db.models import Q
message = UserInfo.object.filter(Q(id__icontent=xxx) | Q(name__icontent=xxx)
Django分页:调用分页组件,分别在view.py和HTML中操作即可
视图函数中:
1.筛选数据:
queryset = UserInfo.objects.all().order_by("xxx")
2.实例化分页类的对象:
page_object = Pagination(request,queryset)
context = {
"queryset": page_object.page_queryset, # 分页的数据
"page_string": page_object.html(), # 页码
}
3.输出结果:
return render(request,"xxx.html",context)
HTML中:
<ul class="pagination justify-content-center">
{{page_string}}
</ul>