目录
创建项目基本框架流程
- pycharm上下载django框架(setting里找到并下载)
- 创建项目:根目录终端命令:django-admin startproject 项目名称
目录:
| 项目名
|____manage.py
|____项目名文件夹
|____|____urls.py 路由配置
|____app名称
|____|____views.py 常用
|____|____models.py 操作数据库
|____|____templates(自建文件夹,存放html文件)
|____|____static(自建文件夹,存放css,js,image,plugins等) - 创建app 终端命令:python manage.py startapp app名称
页面创建流程
- settings.py文件夹里注册app("app名.apps.xxxx") xxxx=app名+config驼峰命名
- urls.py里添加路径 path("index/",views.index.html)
需要先导入app文件(from app名称 import views) - tempplates里面创建html文件
- 运行服务 python manage.py runserver
- 打开服务器,访问 /index/页面
框架应用
模板语法
可以写在html文件里,view对其进行渲染(替换)后返回给urls.py
{% for item in list %}
{% endfor %}
#循环语句
{% if var == something %}
{% else %}
{% endif %}
#条件语句
请求和响应
from django.shortcuts import HttpResponse, redirect
def something(request):
#1获取请求方式(GRT/POST)(浏览器回车请求是get请求)
print(request.method)
#2在url上传递一些值(url?n1=123&n2=999)
print(request.GET)
#3在请求体中传递数据
print(request.POST)
#4[响应]返回 字符串
return HttpResponse("返回内容")
#5[响应]读取html内容->渲染(替换)->字符串,返回给浏览器
return render(request ,'something.html',{"title":"来了"})
#6[响应]浏览器重定向到其它页面
return redirect("https://www.bilibili.com/")
实践:登录功能的实现
html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login/">
<input type="text" name="user" placeholder="用户名">
<input type="text" name="passward" placeholder="密码">
<input type="submit" value="提交"/>
</form>
</body>
</html>
views.py
#用户登录
def login(request):
if request.method == "GET":
return render(request,"login.html")
#如果是post请求,获取用户提交的数据
print(request.POST)
username = request.POST.get("user")
password = request.POST.get("passward")
print(username == 'root' and password == "123")
if username == 'root' and password == "123":
# return HttpResponse("登录成功")
return redirect("https://www.bilibili.com/")
#return HttpResponse("登录失败")
retu
会报错
是因为django的安全保护机制,修改form表单,添加{% csrf_token %}
<form method="post" action="/login/">
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="text" name="passward" placeholder="密码">
<input type="submit" value="提交"/>
</form>
实践项目完善:数据库
Django开发操作数据库比python直接用简单一点,内部提供了ORM框架
终端安装模块命令:pip install mysqlclient
ORM可以做:
创建,修改,删除数据库中的表(无法创建数据库)
操作表中的数据
表相关具体步骤:
- 用MySQL自带工具创建数据库
create database self_django_db DEFAULT CHARSET utf8 COLLATE utf8_general_ci; - django连接数据库
在settings.py里面改# DATABASES = { # "default": { # "ENGINE": "django.db.backends.sqlite3", # "NAME": BASE_DIR / "db.sqlite3", # } # } #修改数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'self_django_db', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': '3306', } }
3.django操作表
创建,删除,修改
在models.py文件里
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
"""
相当于
create table login_userinfo(
id bigint auto_increment primary key, #自动加
name varchar(32),
password varchar(64),
age int
"""
执行命令:
终端:python manage.py makemigrations 和 python manage.py migrate
这样就可以自动创建表结构,在数据库里可以检验一下。
补充:
新增、修改表结构时,由于可能存在已有数据,对于新增的列要指定一下三者之一
1手动输入一个值 2创建时设置默认值(default = xx)
3允许为空(null = True blank = True)
想要操作数据库时,只需要修改model.py,再运行终端的两条命令即可。
列相关具体操作:
#新增数据
表名.objects.create(字段名=值)
#删除
表名.objects.filter(筛选条件).delete()
#筛选条件:filter(字段=值) or all()
#获取数据
#data_list = [行对象,行对象,行对象] QuertSet类型
data_list = 表名.objects.all()
#更新
表名.objects.all(),update(字段 = 值)
实际应用:
再views.py的函数里
#测试ORM
from login import models
def orm(requset):
#测试orm中的数据
#创建
# models.Department.objects.create(title="销售部")
# models.Department.objects.create(title="IT部")
# models.Department.objects.create(title="运营部")
#删除
#models.Department.objects.all().delete()
#获取数据
data_list = models.Department.objects.all()
print(data_list)
for obj in data_list:
print(obj.title)
return HttpResponse("成功")
只要访问这个页面就会执行这些操作
项目实战:用户管理系统(数据库应用)
views.py中
def info_list(request):
#1获取数据库中所有信息
if request.method == "GET":
data_list = UserInfo.objects.all()
# print(data_list)
return render(request,"info_list.html",{"data_list":data_list})
# 添加用户 get看到页面,post提交写入数据库
#获取提交数据
user = request.POST.get("user")
pwd = request.POST.get("pwd")
age = request.POST.get("age")
print()
#添加到数据库
UserInfo.objects.create(name=user, password=pwd, age=age)
return redirect("/info_list/")
def delete(request):
nid = request.GET.get('nid')
UserInfo.objects.filter(id=nid).delete()
return redirect("/info_list/")
html
<div>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>密码</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for obj in data_list %}
<tr>
<td>{{obj.id}}</td>
<td>{{obj.name}}</td>
<td>{{obj.password}}</td>
<td>{{obj.age}}</td>
<td><a href="http://127.0.0.1:8000/info_del/?nid={{obj.id}}">删除</a></td>
</tr>
{% endfor %}
</tbody>
</table>
<br>
<h1>添加用户</h1>
<form method="post">
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="text" name="pwd" placeholder="密码">
<input type="text" name="age" placeholder="年龄">
<input type="submit" value="提交">
</form>
</div>
心得:每个页面对应一个函数,有的页面负责有展示html,有的页面负责实现特定功能(没有展示任务)。每个页面可以接收GET 和POST请求,可以根据请求地种类做出不同地反应