Django项目开发案例教程【可在此基础上进行开发】
CSDN下載鏈接:https://download.csdn.net/download/qq_45021180/86737985
飛書下載 : https://qbq4a8utjq.feishu.cn/file/boxcnctoCqd3YJiZtPB9HOT4VGh
目錄
- 一、創建一個Django項目
- 二、案列測試一
- 三、模板templates 和 靜態文件static使用
- 1、templates模板使用
- 2、靜態文件static使用
- 3、靜態文件使用測試
- 四、模板語法
- 1、數據展示
- 2、條件語句
- 五、案例測試 : 登錄
- 六、ORM - 數據庫
- 1、創建數據庫
- 2、Django連接mysql配置
- 3、類創建數據表
- 4、數據庫遷移
- 5、增刪改查
- 七、用戶管理案例
- 1、創建Django項目
- 2、創建數據庫和表
- 3、頁面模板common.html
- 4、列表展示
- 5、添加
- 6、編輯
- 7、刪除
- 八、ModelForm表單的使用
- 0、準備
- 1、用戶列表【包括搜索】
- 2、添加用戶
- 3、編輯用戶
- 4、刪除用戶
- 其他
- 1、分頁
- 2、學習視頻
一、創建一個Django項目
1.使用Pycharm新建一個Django項目;
二、案列測試一
2.創建Django項目后,在下方終端使用python manage.py startapp user 創建一個app;
上面創建一個app以后需要進行在配置文件setting中進行注冊;在INSTALLED_APPS中添加 'user.apps.UserConfig';【baseDjango/settings.py】
編寫URL與視圖函數的關系【baseDjango/urls.py】
在創建的app下的views.py中編寫路由處理函數【user/views.py】
啟動Django項目,網頁進行測試訪問
三、模板templates 和 靜態文件static使用
1、templates模板使用
在templates創建我們需要的所有html文件;
在setting 中添加templates的配置路徑(一般在創建Django項目會自動生成);
2、靜態文件static使用
創建一個static的目錄,然后依次創建css img js plugins等不同的文件夾,并將需要的文件添加進去;
在setting.py文件內添加如下的配置信息,STATIC_URL = '/static/' STATICFILES_DIRS=(os.path.join(BASE_DIR,"static"),);
3、靜態文件使用測試
配置路由信息【baseDjango/urls.py】
編寫路由的處理函數
index.html的編寫【templates/user/index.html】
部分代碼: {% load static %}<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}">靜態文件使用的測試結果
四、模板語法
1、數據展示
后臺返回單值、數組、字典等數據類型在前端html界面上展示
2、條件語句
{% if name == "戰勝" %}<div>我是戰勝</div> {% else %}<div>我不是戰勝</div> {% endif %}五、案例測試 : 登錄
添加路由信息
path('user/login/', views.user_login),創建login.html頁面文件,注意添加{% csrf_token %}
<body><h1>用戶登錄</h1><form method="post" action="/user/login/">{% csrf_token %}<input type="text" name="name" placeholder="用戶名"><input type="text" name="password" placeholder="密碼"><input type="submit" placeholder="提交"></form> </body>編寫登錄請求響應函數
def user_login(request):if request.method=="GET":return render(request,"user/login.html")else:name = request.POST.get("name")password = request.POST.get("password")print(name,password)return HttpResponse("登錄成功")六、ORM - 數據庫
安裝第三方庫 mysqlclient:pip install mysqlclient
ORM可以幫我們做兩件事:
① 創建、修改、刪除數據庫中的表;但無法創建數據庫;(不用寫sql)
② 操作表中的數據;(不用寫sql)
1、創建數據庫
2、Django連接mysql配置
在 setting.py配置文件中進行修改;
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'baseDjango','USER': 'root','PASSWORD': '123456','HOST': '127.0.0.1','PORT': 3306,} }3、類創建數據表
在model.py 中進行編寫類;
生成的數據表名為:app名_類名
4、數據庫遷移
pycharm中依次執行下面命令:python manage.py makemigrations python manage.py migrate5、增刪改查
from user.models import UserInfo def orm_test(request):# 1. 添加數據UserInfo.objects.create(name="戰勝1",password="123456",age=18)UserInfo.objects.create(name="戰勝2",password="123456",age=18)UserInfo.objects.create(name="戰勝3",password="123456",age=18)# 2. 刪除數據UserInfo.objects.filter(id=1).delete()UserInfo.objects.all().delete()# 3. 查詢數據userList = UserInfo.objects.all() #所有數據user = UserInfo.objects.filter(id=2).first() # 獲取一條數據# 4.更新UserInfo.objects.filter(id=2).update(age=22)return HttpResponse("ORM操作成功")七、用戶管理案例
1、創建Django項目
2、創建數據庫和表
1. 創建數據庫
2. 在model里面編寫表結構
3. 生成數據表,數據庫遷移
python manage.py makemigrations python manage.py migrate3、頁面模板common.html
{% load static %}<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>用戶主頁</title><link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}"><script href="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.js' %}"></script><script href="{% static 'js/jquery-3.6.1.min.js' %}"></script> </head> <body>{# 【導航欄】 #} <nav class="navbar navbar-default"><div class="container"> {# <div class="container-fluid">#}<!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">導航欄</span><span class="icon-bar">1</span><span class="icon-bar">2</span><span class="icon-bar">3</span></button><a class="navbar-brand" href="#">戰勝管理平臺</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="#">權限管理<span class="sr-only">(current)</span></a></li><li><a href="#">用戶管理</a></li></ul><ul class="nav navbar-nav navbar-right"><li><a href="#">登錄</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">戰勝 <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">消息</a></li><li role="separator" class="divider"></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid --> </nav>{# 模板替換部分 #} {% block content %}{% endblock %}</body> </html>4、列表展示
1. 配置url
2. 編寫處理函數
# 【權限列表】 def role_list(request):role_list = UserRole.objects.all()return render(request,"user/role_list.html",{"role_list":role_list})3. 編寫role_list.html,繼承common.html
{% extends "user/common.html" %} {% block content %}<div class="container">{# 新建按鈕 #}<div style="margin-bottom: 10px"><a class="btn btn-success" href="/role/add"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> 新 建 </a></div>{# 表格 #}<div class="panel panel-default"><div class="panel-body"><div class="panel-heading"><span class="glyphicon glyphicon-th-list" aria-hidden="true"></span> 權限列表</div><table class="table table-bordered" ><thead><tr><th>ID</th><th>權限類型</th><th>操作</th></tr></thead><tbody>{% for role in role_list %}<tr><th scope="row">{{ role.id }}</th><td>{{ role.type }}</td><td><a class="btn btn-primary btn-xs" href="/role/{{ role.id }}/edit/">編輯</a><a class="btn btn-danger btn-xs" href="/role/delete?rid={{ role.id }}">刪除</a></td></tr>{% endfor %}</tbody></table></div></div> </div>{% endblock %}5、添加
1. 配置url
path('role/add/', views.role_add),2. 編寫處理函數
# 【添加權限】 def role_add(request):if request.method=="GET":return render(request,"user/role_add.html")else:typeName = request.POST.get("typeName")print(typeName)UserRole.objects.create(type=typeName)return redirect("/role/list")3. 編寫role_add.html,繼承common.html
{% extends "user/common.html" %} {% block content %} <div class="panel panel-default container"><div class="panel-heading">添加權限</div><div class="panel-body"><form class="navbar-form navbar-left" method="post">{% csrf_token %}<div class="form-group"><input type="text" name="typeName" class="form-control" placeholder="權限名"></div><button type="submit" class="btn btn-primary">添 加</button></form></div> </div> {% endblock %}6、編輯
1. 配置url
path('role/<int:rid>/edit/', views.role_edit),2. 編寫處理函數
def role_edit(request,rid):if request.method=="GET":print(rid)role = UserRole.objects.filter(id=rid).first()return render(request,"user/role_edit.html",{"role":role})else:print(rid)typeName = request.POST.get("typeName")print(typeName)UserRole.objects.filter(id=rid).update(type=typeName)return redirect("/role/list")3. 編寫role_edit.html,繼承common.html
{% extends "user/common.html" %} {% block content %}<div class="panel panel-default container"><div class="panel-heading">編輯權限</div><div class="panel-body"><form class="navbar-form navbar-left" method="post">{% csrf_token %}<div class="form-group"><input type="text" name="typeName" value="{{ role.type }}" class="form-control" placeholder="權限名"></div><button type="submit" class="btn btn-primary">修 改</button></form></div> </div> {% endblock %}7、刪除
1. 配置url
path('role/delete/', views.role_delete),2. 編寫處理函數
def role_delete(request):rid = request.GET.get("rid")print(rid)UserRole.objects.filter(id=rid).delete()return redirect("/role/list")八、ModelForm表單的使用
0、準備
1. 配置URL
path('user/list/', views.user_list), path('user/add/', views.user_add), path('user/<int:uid>/edit/', views.user_edit), path('user/delete/', views.user_delete),2. 編寫Model
from django.db import models class UserRole(models.Model):"""用戶角色表"""type = models.CharField(verbose_name="用戶類型",max_length=10)def __str__(self):return self.typeclass UserInfo(models.Model):"""用戶表"""name = models.CharField(verbose_name="名稱", max_length=20)password = models.CharField(verbose_name="密碼",max_length=30)age = models.IntegerField(verbose_name="年齡")account = models.DecimalField(verbose_name="賬戶余額",max_digits=10,decimal_places=2,default=0)create_date = models.DateTimeField(verbose_name="創建時間")gender_choices = ((1,"男"),(2,"女")) # 在Django中的約束,在數據庫中還是保存1,2,獲取時可使用get_gender_display()gender = models.SmallIntegerField(verbose_name="性別",choices=gender_choices)#外鍵: 【to="哪張表"】,【to_field="哪個字段"】 【on_delete=models.CASCADE表示級聯刪除】# role_id = models.ForeignKey(to="UserRole",to_field="id",on_delete=models.CASCADE)# 【on_delete=models.SET_NULL 當外鍵表刪除時,這字段可以為空】role = models.ForeignKey(verbose_name="類型",to="UserRole",to_field="id",null=True,blank=True,on_delete=models.SET_NULL)3. 修改setting.py,設置中文
LANGUAGE_CODE = 'zh-hans'1、用戶列表【包括搜索】
1. 處理函數
# 【用戶列表】 def user_list(request):q_name = request.GET.get("q","")data_dict = {}if q_name:data_dict["name__contains"] = q_nameuser_list = UserInfo.objects.filter(**data_dict)return render(request,"user/user_list.html",{"user_list":user_list,"q_name":q_name})2. 編寫user_list.html頁面
可通過get_字段名_display 來顯示外鍵表中的數據,而不是顯示外鍵id,如:get_gender_display ;
{% extends "user/common.html" %} {% block content %} {# 【用戶列表】 #} <div class="container">{# 新建按鈕 #}<div style="margin-bottom: 10px"><a class="btn btn-success" href="/user/add"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> 添加用戶 </a><div style="float: right;width: 300px"><form method="get"><div class="input-group"><input type="text" class="form-control" name="q" value="{{ q_name }}" placeholder="Search for..."><span class="input-group-btn"><button class="btn btn-default" type="submit"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button></span></div><!-- /input-group --></form></div></div>{# 表格 #}<div class="panel panel-default"><div class="panel-body"><div class="panel-heading"><span class="glyphicon glyphicon-th-list" aria-hidden="true"></span> 用戶列表</div><table class="table table-bordered" ><thead><tr><th>ID</th><th>用戶名</th><th>密碼</th><th>年齡</th><th>余額</th><th>創建時間</th><th>性別</th><th>類型</th><th>操作</th></tr></thead><tbody>{% for user in user_list %}<tr><th scope="row">{{ user.id }}</th><td>{{ user.name }}</td><td>{{ user.password }}</td><td>{{ user.age }}</td><td>{{ user.account }}</td><td>{{ user.create_date }}</td><td>{{ user.get_gender_display }}</td><td>{{ user.role }}</td><td><a class="btn btn-primary btn-xs" href="/user/{{ user.id }}/edit/">編輯</a><a class="btn btn-danger btn-xs" href="/user/delete?uid={{ user.id }}">刪除</a></td></tr>{% endfor %}</tbody></table></div></div> </div>{% endblock %}2、添加用戶
1. 處理函數
from django import forms from django.core.exceptions import ValidationError from django.core.validators import RegexValidator# 【定義一個添加表單內容】 class UserAddModelForm(forms.ModelForm):#驗證方法一:添加校驗條件# name = forms.CharField(min_length=3,label="用戶名")name = forms.CharField(label="用戶名",validators=[RegexValidator(r'^1[3-9]\d{9}$','手機號格式錯誤')])confirm_password = forms.CharField(label="確認密碼",widget=forms.PasswordInput(render_value=True))# 驗證方法二:賬號的驗證def clean_name(self):text_name = self.cleaned_data["name"]#判斷添加賬號是否重復exists = UserInfo.objects.filter(name=text_name).exists()if exists:raise ValidationError("賬號已經存在")if len(text_name) < 3:raise ValidationError("長度不能小于3!")return text_name# 密碼的驗證def clean_confirm_password(self): # 這是是驗證確認密碼而不是密碼,因為確認密碼在后面才出現print(self.cleaned_data)pwd = self.cleaned_data.get("password")confirm_pwd = self.cleaned_data.get("confirm_password")if pwd != confirm_pwd:raise ValidationError("兩次密碼不一致!")return pwdclass Meta:model = UserInfo# 將要生成的表單項fields = ["name","password","confirm_password","age","account","create_date","gender","role"]widgets = {"password": forms.PasswordInput(render_value=True),}def __init__(self,*args,**kwargs):super().__init__(*args,**kwargs)# 循環找到所有的插件添加樣式for name,filed in self.fields.items():if filed.widget.attrs:filed.widget.attrs["class"] = "form-control"filed.widget.attrs["placeholder"] = filed.labelelse:filed.widget.attrs = {"class":"form-control","placeholder":filed.label}# 【處理函數】 def user_add(request):if request.method == "GET": # GET獲取add頁面form = UserAddModelForm()return render(request,"user/user_add.html",{"form":form})else: # POST提交add數據form = UserAddModelForm(data=request.POST)if form.is_valid():print(form.cleaned_data)# 數據合法則保存到數據庫form.save()return redirect("/user/list/")else:print(form.errors)return render(request, "user/user_add.html", {"form": form})2. 編寫user_add.html頁面
{% extends "user/common.html" %} {% block content %} <div class="panel panel-default container"><div class="panel-heading">添加用戶</div><div class="panel-body"><form method="post">{% csrf_token %}{% for item in form %}<div class="form-group"><label>{{ item.label }}</label>{{ item }}<span style="color: red">{{ item.errors.0 }}</span></div>{% endfor %}<div><button type="submit" class="btn btn-primary">添 加</button></div></form></div> </div> {% endblock %}3、編輯用戶
1. 處理函數
from django import forms from django.core.exceptions import ValidationError from django.core.validators import RegexValidator# 【定義一個編輯表單內容】 class UserEditModelForm(forms.ModelForm):#驗證方法一:添加校驗條件# name = forms.CharField(min_length=3,label="用戶名")name = forms.CharField(label="用戶名",validators=[RegexValidator(r'^1[3-9]\d{9}$','手機號格式錯誤')])# 驗證方法二:def clean_name(self):row_id = self.instance.pk # 當前操作行的idprint(row_id)text_name = self.cleaned_data["name"]exists = UserInfo.objects.exclude(id=row_id).filter(name=text_name).exists()if exists:raise ValidationError("賬號已經存在")if len(text_name) < 3:raise ValidationError("長度不能小于3!")return text_nameclass Meta:model = UserInfo# 將要生成的表單項fields = ["name","password","age","account","create_date","gender","role"]# widgets = {# "name": forms.TextInput(attrs={"class":"form-control"}),# "password": forms.PasswordInput(attrs={"class":"form-control"}),# }def __init__(self,*args,**kwargs):super().__init__(*args,**kwargs)# 循環找到所有的插件添加樣式for name,filed in self.fields.items():if filed.widget.attrs:filed.widget.attrs["class"] = "form-control"filed.widget.attrs["placeholder"] = filed.labelelse:filed.widget.attrs = {"class":"form-control","placeholder":filed.label}# 【處理函數】 def user_edit(request,uid):if request.method=="GET":usr_obj = UserInfo.objects.filter(id=uid).first() #數據庫中獲取數據form = UserEditModelForm(instance=usr_obj)return render(request, "user/user_edit.html", {"form": form})else:usr_obj = UserInfo.objects.filter(id=uid).first() # 數據庫中獲取數據form = UserEditModelForm(data=request.POST,instance=usr_obj)if form.is_valid():form.save()return redirect("/user/list/")else:return render(request, "user/user_edit.html", {"form": form})2. 編寫user_add.html頁面
{% extends "user/common.html" %} {% block content %} <div class="panel panel-default container"><div class="panel-heading">編輯用戶</div><div class="panel-body"><form method="post">{% csrf_token %}{% for item in form %}<div class="form-group"><label>{{ item.label }}</label>{{ item }}<span style="color: red">{{ item.errors.0 }}</span></div>{% endfor %}<div><button type="submit" class="btn btn-primary">修 改</button></div></form></div> </div> {% endblock %}4、刪除用戶
def user_delete(request):uid = request.GET.get("uid")UserInfo.objects.filter(id=uid).delete()return redirect("/user/list")、、
其他
1、分頁
2、學習視頻
https://www.bilibili.com/video/BV1rT4y1v7uQ?p=83&vd_source=36eb54c6ca01de901520c89f6008c538
總結
以上是生活随笔為你收集整理的Django项目开发案例教程【可在此基础上进行开发】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于jsp的小说阅读下载系统
- 下一篇: 如何打开Office 2007文档