Django的主要开发流程(以扩充用户模型为例)
生活随笔
收集整理的這篇文章主要介紹了
Django的主要开发流程(以扩充用户模型为例)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求描述
完成個人中心頁面的用戶信息更新
如圖
開發流程(以users為例):
1. startapp創建應用
cookiecutter創建項目時已經幫我們創建好了users
如果要創建自己的app,則使用
2. 寫users下的models.py
class User(AbstractUser):# blank=True表示前端提交時可以為空, null=True表示數據庫里該字段可以為空nickname = models.CharField(verbose_name='用戶昵稱', blank=True, null=True, max_length=255, default='')job = models.CharField(verbose_name='用戶職業', blank=True, null=True, max_length=50, default='未知')introduction = models.TextField(verbose_name='簡介', blank=True, null=True, default='該用戶很懶,什么都沒留下')avtar = models.ImageField(verbose_name='頭像', upload_to='users/avatars/', blank=True, null=True, default='')address = models.CharField(verbose_name='住址', blank=True, null=True, max_length=50, default='')birthday = models.DateField(verbose_name='生日', blank=True, null=True, default=timezone.now)personal_url = models.URLField(max_length=255, null=True, blank=True, verbose_name='個人鏈接', default='')weibo = models.URLField(max_length=255, null=True, blank=True, verbose_name='微博鏈接', default='')zhihu = models.URLField(max_length=255, null=True, blank=True, verbose_name='知乎鏈接', default='')github = models.URLField(max_length=255, null=True, blank=True, verbose_name='GitHub鏈接', default='')linkedin = models.URLField(max_length=255, null=True, blank=True, verbose_name='LinkedIn鏈接', default='')created_at = models.DateTimeField(auto_now_add=True, verbose_name='創建時間')updated_at = models.DateTimeField(auto_now=True, verbose_name='更新時間')class Meta:verbose_name = '用戶'verbose_name_plural = verbose_namedef __str__(self):return self.username# 前端界面顯示用戶信息 有昵稱則返回昵稱,否則返回用戶名def get_profile_name(self):if self.nickname:return self.nicknamereturn self.usernamedef get_absolute_url(self):return reverse("users:detail", kwargs={"username": self.username})3. 在settings下注冊app
創建項目時已經有了
LOCAL_APPS = ["mydjango.users.apps.UsersConfig",# Your stuff: custom apps go here ] # https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS4. makemigrations遷移數據庫
python manage.py makemigrations python manage.py migrate5. 設計路由
users下的urls.py
app_name = "users" urlpatterns = [path("~redirect/", view=user_redirect_view, name="redirect"),path("~update/", view=user_update_view, name="update"),path("<str:username>/", view=user_detail_view, name="detail"), ]6. 視圖
# 更新視圖 class UserUpdateView(LoginRequiredMixin, UpdateView):model = User # 模型fields = ["nickname", "job", "introduction", "avatar", "address", "birthday","personal_url", "weibo", "zhihu", "github", "linkedin"] # 可更新的字段template_name = 'users/user_form.html'def get_success_url(self): # 更新成功后跳轉return reverse("users:detail", kwargs={"username": self.request.user.username})def get_object(self): # 獲取當前登錄的對象return User.objects.get(username=self.request.user.username)def form_valid(self, form):messages.add_message(self.request, messages.INFO, _("Infos successfully updated"))return super().form_valid(form)user_update_view = UserUpdateView.as_view()7. 渲染前端模板
{% extends "base.html" %} {% load crispy_forms_tags %}{% block title %}{{ user.username }}{% endblock %}{% block content %}<h1>{{ user.username }}</h1>{# 增加enctype="multipart/form-data"接收多媒體文件以便上傳頭像 #}<form class="form-horizontal" method="post" enctype="multipart/form-data" action="{% url 'users:update' %}">{% csrf_token %}{{ form|crispy }}<div class="control-group"><div class="controls"><button type="submit" class="btn btn-primary">更新個人信息</button></div></div></form> {% endblock %} 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的Django的主要开发流程(以扩充用户模型为例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django开发准则与最佳实践
- 下一篇: WebSocket的初步认识