ToB企服应用市场:ToB评测及商务社交产业平台

标题: 前端+数据库+djago入门(Djago部分) [打印本页]

作者: 王國慶    时间: 2024-6-11 13:25
标题: 前端+数据库+djago入门(Djago部分)
django的安装

在pycharm中安装即可

创建django项目

django项目会有一些默认的文件和文件夹
1. 在终端创建

(不测试了)
2. 在Pycharm中创建项目(不能是社区版pycharm)

新建项目,选型django项目

默认项目文件的介绍

 3. APP

 


在Pycharm中创建app

利用pycharm中的terminal
 创建新app01后的各文件功能



运行django

激活App01

1. 在django的项目文件夹中,打开setting.py文件,找到下图所示位置:

2.在App01文件夹中,打开 apps.py文件,找到Class的名称:(本示例)App01Config
3. 如上图所示,在列表最后加上'app01.apps.App01Config'
编写URL和视图函数对应关系 [urls.py]
编写URL和视图函数对应关系

1. 在项目文件urls.py中编写对应关系,
2. from app01 import views
这是从app01中,导入views文件(函数编写在该文件中)
3. path('index/', views.index),
这里是在对应url和函数。如果访问www.xxx.com/url,就会执行后面对应的函数(views.index)



启动django 

命令行启动

在pycharm的命令框中
   python manage.py runserver
  Pycharm 启动
点击程序的运行按钮
url与返回页面的逻辑

1. 先在url.py中写url地址
2.  在views.py写对应关系




 模板和静态文件

加载模板的方式,参照图片中的 def user_list(request)

 加载图片的方式

1. 在app目录下创建static文件夹
2. 用static方法引入css和js的方法


模板语法

本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理
case: 建tpl网页,及内容,并访问views中的列表



 访问字典中的内容


 列表里面套字典,访问的方式



请求和响应




 

重定向的返回方式

是Django将网页返回给浏览器,浏览器自己访问web页面。不是Django访问了web页面再返回给浏览器
案例 用户登录


urls.py
  1. from django.urls import path
  2. from app01 import views
  3. urlpatterns = [
  4.    
  5.     # 用户登录
  6.     path('login/', views.login),
  7. ]
复制代码
views.py 
  1. def login(request):
  2.     if request.method == "GET":
  3.         return render(request, "login.html")
  4.     else:
  5.         print(request.POST)
  6.         return HttpResponse("登录成功")
复制代码
login.html
  1. <body>
  2.     <h1>用户登录</h1>
  3. <form method = "post" action="/login/">
  4.     {%  csrf_token %}
  5.     <input type="text" name="user" placeholder="用户名">
  6.     <input type="password" name="pwd" placeholder="密码" >
  7.     <input type= "submit" value="提交"/>
  8. </form>
  9. </body>
复制代码
修改成登录跳转新页面,登录失败重新输入账号暗码

views.py
  1. def login(request):
  2.     if request.method == "GET":
  3.         return render(request, "login.html")
  4.    
  5.     else:
  6.     #     print(request.POST)
  7.         username = request.POST.get("user")
  8.         password = request.POST.get("pwd")
  9.         if username == "host" and password == "123":
  10.             # return HttpResponse("登录成功")
  11.             return redirect("https://www.chinaunicom.com.cn/")
  12.         
  13.         else:
  14.             # return HttpResponse("登录失败")
  15.             return render(request, 'login.html', {"error_msg": "用户名或密码错误"})
复制代码
 login.html

  1. <body>
  2.     <h1>用户登录</h1>
  3. <form method = "post" action="/login/">
  4.     {%  csrf_token %}
  5.     <input type="text" name="user" placeholder="用户名">
  6.     <input type="password" name="pwd" placeholder="密码" >
  7.     <input type= "submit" value="提交"/>
  8.     <span style="color: red">{{ error_msg }}</span>
  9. </form>
  10. </body>
复制代码
数据库操纵

Django开发操纵数据库更简单,内部提供了ORM框架
安装第三方模块

   mysqlclient
  ORM

ORM可以帮助我们做两件事:

Django毗连数据库

修改settings.py文件

增长如下内容: 
  
  1. DATABASES = {
  2.     'default': {
  3.         'ENGINE': 'django.db.backends.mysql',
  4.         'NAME':'bruce01',
  5.         'USER': 'root',
  6.         'PASSWORD': '',
  7.         'HOST': '127.0.0.1',
  8.         'PORT': 3306,
  9.     }
  10. }
复制代码
Django操纵表


修改models.py文件

  
  1. class UserInfo(models.Model):
  2.     name = models.CharField(max_length=20)
  3.     password = models.CharField(max_length=20)
  4.     age = models.IntegerField() 
复制代码
在服务器中项目根目录下执行命令(注册APP)
   python manage.py makemigrations
python manage.py migrate 
   

检察Mysql数据库

再写一张表


在服务器中项目根目录下再次执行命令(注册APP)
   python manage.py makemigrations
python manage.py migrate 
  删除表的某一行

这是userinfo的原表

表明掉不想要的行
  
  1. class UserInfo(models.Model):
  2.     name = models.CharField(max_length=20)
  3.     password = models.CharField(max_length=20)
  4.     # age = models.IntegerField()
复制代码
在服务器中项目根目录下再次执行命令(注册APP)
   python manage.py makemigrations
python manage.py migrate 
  

添加列

修改表的话,如果原表中存有数据,此时如果增长一个新的列,需要设定一个默认值 

再次执行下面命令,会出现选择,1是提供一个预设值,2是手动输入一个默认值
   python manage.py makemigrations
  

下图是手动输入默认值(选择2,回车后会退出,再写入下面的默认值)

之后再运行下面代码,就会将新的列插入进来
   python manage.py migrate 
  允许为空
  1. class UserInfo(models.Model):
  2.     name = models.CharField(max_length=20)
  3.     password = models.CharField(max_length=20)
  4.     age = models.IntegerField()
  5.     # 新增列
  6.     size = models.IntegerField(default=2)
  7.     # 允许为空
  8.     data = models.IntegerField(null=True, blank=True)
复制代码
操纵表中的数据

新增一行数据
  1. class UserInfo(models.Model):
  2.     name = models.CharField(max_length=20)
  3.     password = models.CharField(max_length=20)
  4.     age = models.IntegerField(default=2)
  5.    
  6. class Department(models.Model):
  7.     title = models.CharField(max_length=16)
  8. # 新建数据
  9. # 本质:insert into app01_department(title)values()
  10. Department.objects.create(title="销售部")
  11. UserInfo.objects.create(name="bruce",password="123",age="18")
复制代码
在Django建url访问操纵数据表

新增url(编辑urls.py文件)
  1. from django.urls import path
  2. from app01 import views
  3. urlpatterns = [
  4.     # path('admin/', admin.site.urls),
  5.     # path('index_app/', views.index_app),
  6.     # path('user_list/', views.user_list),
  7.     # path('tpl/', views.tpl),
  8.     # path('something/', views.something),
  9.     # path('login/', views.login),
  10.     path('orm/', views.orm),
  11. ]
复制代码
编辑views.py
  1. from app01.models import Department
  2. def orm(request):
  3.     # 新建数据
  4.     Department.objects.create(title="123")
  5.     return HttpResponse("成功")
复制代码
models.py文件如下:

 网页运行结果如下: 

 删除数据(照旧在views.py文件中)
  1. def orm(request):
  2.     # 新建数据
  3.     Department.objects.create(title="123")
  4.     #删除数据
  5.     Department.objects.filter(id=2).delete()
  6.     # 全部删除
  7.     Department.objects.all().delete()
  8.     return HttpResponse("成功")
复制代码
表现数据
最下方会表现表中的行,此时是一个对象,不能表现行的全部内容

用循环查询,就能看到对象中的值 
  1. def orm(request):
  2.     # 新建数据
  3.     Department.objects.create(title="123")
  4.     # 删除数据
  5.     # Department.objects.filter(id=2).delete()
  6.     # 全部删除
  7.     # Department.objects.all().delete()
  8.     # 获取数据
  9.     data_list = Department.objects.all()
  10.     print(data_list)
  11.     for obj in data_list:
  12.         print(obj.title)
  13.     return HttpResponse("成功")
复制代码
 更新数据,
  1. from app01.models import Department
  2. def orm(request):
  3.     # 新建数据
  4.     # Department.objects.create(title="123")
  5.     # 删除数据
  6.     # Department.objects.filter(id=2).delete()
  7.     # 全部删除
  8.     # Department.objects.all().delete()
  9.     # 获取数据
  10.     # data_list = Department.objects.all()
  11.     # print(data_list)
  12.     # for obj in data_list:
  13.     #     print(obj.title)
  14.     # 更新数据
  15.     Department.objects.all().update(title="新世界")
  16.     return HttpResponse("成功")
复制代码
单独更新某个数值的方式,'name'是列索引
   UserInfo.objects.filter(name="bruce").update(age=18)
 
  
项目报错:运行django项目文件,非py文件即可解决 



案例:用户管理

1. 展示用户列表


- 获取所有用户信息
- HTML渲染
网页自动获取数据库表格内容
views.py文件内容
  1. from django.shortcuts import render, HttpResponse, redirect
  2. from app01.models import UserInfo
  3. def info_list(request):
  4.     # 1.获取数据库中所有的用户信息
  5.     data_list = UserInfo.objects.all()
  6.     print(data_list)
  7.     # for item in data_list:
  8.     #     item.id =
  9.     return render(request, "info_list.html",{"data_list":data_list})
复制代码
user_info.html 
  1. <body>
  2. <h1>INFO列表</h1>
  3. <table >
  4.     <thead>
  5.         <tr>
  6.             <th>ID</th>
  7.             <th>姓名</th>
  8.             <th>密码</th>
  9.             <th>年龄</th>
  10.         </tr>
  11.     </thead>
  12.     <tbody>
  13.     {%  for obj in data_list %}
  14.         <tr>
  15.             <td>{{ obj.id }}</td>
  16.             <td>{{ obj.name }}</td>
  17.             <td>{{ obj.password }}</td>
  18.             <td>{{ obj.age }}</td>
  19.         </tr>
  20.     {% endfor %}
  21.     </tbody>
  22. </table>
  23. </body>
  24. </html>
复制代码
urls.py 
  1. urlpatterns = [
  2.    
  3.     path('Info/list/', views.info_list),
  4. ]
复制代码
2. 添加用户

view.py
  1. from django.shortcuts import render, HttpResponse, redirect
  2. from app01.models import UserInfo
  3. def info_list(request):
  4.     # 1.获取数据库中所有的用户信息
  5.     data_list = UserInfo.objects.all()
  6.     print(data_list)
  7.     return render(request, "info_list.html",{"data_list":data_list})
  8. def info_add(request):
  9.     if request.method == "GET":
  10.         return render(request,'info_add.html')
  11.     # 获取用户提交的数据
  12.     user = request.POST.get("user")
  13.     pwd = request.POST.get("password")
  14.     age = request.POST.get("age")
  15.     # 添加到数据库
  16.     UserInfo.objects.create(name=user, password=pwd, age=age)
  17.     return HttpResponse("添加成功")
复制代码
新建 info_add.html
  1. <body>
  2. <h1>添加用户</h1>
  3. <form method="post" action="/info/add/">
  4.     {% csrf_token %}
  5.     <input type="text" name="user" placeholder="用户名">
  6.     <input type="text" name="password" placeholder="密码">
  7.     <input type="text" name="age" placeholder="年龄">
  8.     <input type="submit" value="提交">
  9. </form>
  10. </body>
  11. </html>
复制代码
urls.py
  1. urlpatterns = [
  2.    
  3.     path('Info/list/', views.info_list),
  4.     path('Info/add/', views.info_add),
  5. ]
复制代码
上面的程序可能在url的大小写上有问题,下面的版本测试正常
在info_list界面,加上一个“添加“按钮,当点击添加按钮时,跳转到info_add界面,可添加新用户
views.py
  1. rom django.shortcuts import render, HttpResponse, redirect
  2. from app01.models import UserInfo
  3. def info_list(request):
  4.     # 1.获取数据库中所有的用户信息
  5.     data_list = UserInfo.objects.all()
  6.     print(data_list)
  7.     return render(request, "info_list.html", {"data_list": data_list})
  8. def info_add(request):
  9.     if request.method == "GET":
  10.         return render(request, 'info_add.html')
  11.     # 获取用户提交的数据
  12.     user = request.POST.get("user")
  13.     pwd = request.POST.get("password")
  14.     age = request.POST.get("age")
  15.     # 添加到数据库
  16.     UserInfo.objects.create(name=user, password=pwd, age=age)
  17.     return HttpResponse("添加成功")
复制代码
info_add.html
  1. <body>
  2. <h1>添加用户</h1>
  3. <form method="post" action="/Info/add/">
  4.     {% csrf_token %}
  5.     <input type="text" name="user" placeholder="用户名">
  6.     <input type="text" name="password" placeholder="密码">
  7.     <input type="text" name="age" placeholder="年龄">
  8.     <input type="submit" value="提交">
  9. </form>
  10. </body>
  11. </html>
复制代码
info_list.html
  1. <h1>INFO列表</h1>
  2. {#添加一个”添加“按钮,点击时跳转到添加用户界面#}
  3. <a href="http://127.0.0.1:8000/Info/add/">添加</a>
  4. <table >
  5.     <thead>
  6.         <tr>
  7.             <th>ID</th>
  8.             <th>姓名</th>
  9.             <th>密码</th>
  10.             <th>年龄</th>
  11.         </tr>
  12.     </thead>
  13.     <tbody>
  14.     {%  for obj in data_list %}
  15.         <tr>
  16.             <td>{{ obj.id }}</td>
  17.             <td>{{ obj.name }}</td>
  18.             <td>{{ obj.password }}</td>
  19.             <td>{{ obj.age }}</td>
  20.         </tr>
  21.     {% endfor %}
  22.     </tbody>
  23. </table>
  24. </body>
复制代码
urls.py
  1. from django.urls import pathfrom app01 import viewsurlpatterns = [
  2.    
  3.     path('Info/list/', views.info_list),
  4.     path('Info/add/', views.info_add),
  5. ]
复制代码
删除用户

urls.py
  1. urlpatterns = [
  2.     path('Info/list/', views.info_list),
  3.     path('Info/add/', views.info_add),
  4.     path('Info/delete/', views.info_delete),
  5. ]
复制代码
views.py
  1. from django.shortcuts import render, HttpResponse, redirect
  2. from app01.models import UserInfo
  3. def info_list(request):
  4.     # 1.获取数据库中所有的用户信息
  5.     data_list = UserInfo.objects.all()
  6.     print(data_list)
  7.     return render(request, "info_list.html", {"data_list": data_list})
  8. def info_add(request):
  9.     if request.method == "GET":
  10.         return render(request, 'info_add.html')
  11.     # 获取用户提交的数据
  12.     user = request.POST.get("user")
  13.     pwd = request.POST.get("password")
  14.     age = request.POST.get("age")
  15.     # 添加到数据库
  16.     UserInfo.objects.create(name=user, password=pwd, age=age)
  17.     return HttpResponse("添加成功")
  18. def info_delete(request):    nid = request.GET.get("nid")    UserInfo.objects.filter(id=nid).delete()    return HttpResponse("删除成功")
复制代码
在网页中输入下面地址,nid=X(X表示删除的id值)

自动删除行数据(通过增长一列删除按钮)
 urls.py
  1. urlpatterns = [
  2.     path('Info/list/', views.info_list),
  3.     path('Info/add/', views.info_add),
  4.     path('Info/delete/', views.info_delete),
  5. ]
复制代码
info_list.html
  1. <body>
  2. <h1>INFO列表</h1>
  3. {#添加一个”添加“按钮,点击时跳转到添加用户界面#}
  4. <a href="http://127.0.0.1:8000/Info/add/">添加</a>
  5. <table >
  6.     <thead>
  7.         <tr>
  8.             <th>ID</th>
  9.             <th>姓名</th>
  10.             <th>密码</th>
  11.             <th>年龄</th>
  12. {#            增加一列操作栏,用来删除数据#}
  13.             <th>操作</th>
  14.         </tr>
  15.     </thead>
  16.     <tbody>
  17.     {%  for obj in data_list %}
  18.         <tr>
  19.             <td>{{ obj.id }}</td>
  20.             <td>{{ obj.name }}</td>
  21.             <td>{{ obj.password }}</td>
  22.             <td>{{ obj.age }}</td>
  23. {#            给每行添加一个删除按钮#}
  24.             <td>
  25. {#                点击删除按钮,跳转到删除的页面,id设置为自动获取当前行的id值#}
  26.                 <a href="http://127.0.0.1:8000/Info/delete/?nid={{ obj.id }}">删除</a>
  27.             </td>
  28.         </tr>
  29.     {% endfor %}
  30.     </tbody>
  31. </table>
  32. </body>
复制代码
info_add.html
  1. <body>
  2. <h1>添加用户</h1>
  3. <form method="post" action="/Info/add/">
  4.     {% csrf_token %}
  5.     <input type="text" name="user" placeholder="用户名">
  6.     <input type="text" name="password" placeholder="密码">
  7.     <input type="text" name="age" placeholder="年龄">
  8.     <input type="submit" value="提交">
  9. </form>
  10. </body>
复制代码
views.py
  1. from django.shortcuts import render, HttpResponse, redirect
  2. from app01.models import UserInfo
  3. def info_list(request):
  4.     # 1.获取数据库中所有的用户信息
  5.     data_list = UserInfo.objects.all()
  6.     print(data_list)
  7.     return render(request, "info_list.html", {"data_list": data_list})
  8. def info_add(request):
  9.     if request.method == "GET":
  10.         return render(request, 'info_add.html')
  11.     # 获取用户提交的数据
  12.     user = request.POST.get("user")
  13.     pwd = request.POST.get("password")
  14.     age = request.POST.get("age")
  15.     # 添加到数据库
  16.     UserInfo.objects.create(name=user, password=pwd, age=age)
  17.     return HttpResponse("添加成功")
  18. #手动输入url来删除标签def info_delete(request):    nid = request.GET.get("nid")    UserInfo.objects.filter(id=nid).delete()    return HttpResponse("删除成功")
复制代码
修改views.py最后一行,让重新返回用户界面
  1. def info_delete(request):
  2.     nid = request.GET.get("nid")
  3.     UserInfo.objects.filter(id=nid).delete()
  4.     # return HttpResponse("删除成功")
  5.     # 重新返回用户界面
  6.     return redirect("/Info/list/")
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4