日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django项目开发案例教程【可在此基础上进行开发】

發布時間:2023/12/29 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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名_類名

from django.db import models class UserInfo(models.Model):name = models.CharField(max_length=20)password = models.CharField(max_length=30)age = models.IntegerField()""" 【上面的類等價于下面的sql語句】create table user_userinfo(id bigint auto_increment primary key,name varchar(20),password varchar(30),age int) """

4、數據庫遷移

pycharm中依次執行下面命令:python manage.py makemigrations python manage.py migrate

5、增刪改查

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項目

  • 創建一個新的Django項目;
  • 創建一個APP;
  • 修改配置文件setting.py【注冊APP,配置數據庫 】
  • 2、創建數據庫和表

    1. 創建數據庫
    2. 在model里面編寫表結構

    from django.db import models class UserRole(models.Model):"""用戶角色表"""type = models.CharField(verbose_name="用戶類型",max_length=10)class 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(to="UserRole",to_field="id",null=True,blank=True,on_delete=models.SET_NULL)#注意: obj.role 可以在直接獲取到外鍵關聯的對象

    3. 生成數據表,數據庫遷移

    python manage.py makemigrations python manage.py migrate

    3、頁面模板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

    path('role/list/', views.role_list),

    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项目开发案例教程【可在此基础上进行开发】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。