def login(request): if request.method == 'POST': back_dic = {'code':1000,'msg':''} username = request.POST.get('username') password = request.POST.get('password') code = request.POST.get('code') # 1 先校驗驗證碼是否正確 本身決定是否忽略 統一轉大寫或者小寫再比較 if request.session.get('code').upper() == code.upper(): # 2 校驗用戶名和密碼是否正確 user_obj = auth.authenticate(request,username=username,password=password) if user_obj: # 保存用戶狀態 auth.login(request,user_obj) back_dic['url'] = '/home/' else: back_dic['code'] = 2000 back_dic['msg'] = '用戶名或密碼錯誤' else: back_dic['code'] = 3000 back_dic['msg'] = '驗證碼錯誤' return JsonResponse(back_dic) return render(request,'login.html')
# 1.動態展現用戶名稱 {% if request.user.is_authenticated %} <li><a href="#">{{ request.user.username }}</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><a href="#">修改頭像</a></li> <li><a href="#">後臺管理</a></li> <li role="separator" class="divider"></li> <li><a href="#">退出登錄</a></li> </ul> </li> {% else %} <li><a href="{% url 'reg' %}">註冊</a></li> <li><a href="{% url 'login' %}">登錄</a></li> {% endif %} # 更多操做
""" django給你提供了一個可視化的界面用來讓你方便的對你的模型表 進行數據的增刪改查操做 若是你先想要使用amdin後臺管理操做模型表 你須要先註冊你的模型表告訴admin你須要操做哪些表 去你的應用下的admin.py中註冊你的模型表 from django.contrib import admin from app01 import models # Register your models here. admin.site.register(models.UserInfo) admin.site.register(models.Blog) admin.site.register(models.Category) admin.site.register(models.Tag) admin.site.register(models.Article) admin.site.register(models.Article2Tag) admin.site.register(models.UpAndDown) admin.site.register(models.Comment) """ # admin會給每個註冊了的模型表自動生成增刪改查四條url http://127.0.0.1:8000/admin/app01/userinfo/ 查 http://127.0.0.1:8000/admin/app01/userinfo/add/ 增 http://127.0.0.1:8000/admin/app01/userinfo/1/change/ 改 http://127.0.0.1:8000/admin/app01/userinfo/1/delete/ 刪 http://127.0.0.1:8000/admin/app01/blog/ 查 http://127.0.0.1:8000/admin/app01/blog/add/ 增 http://127.0.0.1:8000/admin/app01/blog/1/change/ 改 http://127.0.0.1:8000/admin/app01/blog/1/delete/ 刪 """ 關鍵點就在於urls.py中的第一條自帶的url 前期咱們須要本身手動苦逼的錄入數據,本身克服一下 """ # 1.數據綁定尤爲須要注意的是用戶和我的站點不要忘記綁定了 # 2.標籤 # 3.標籤和文章 千萬不要把別人的文章綁定標籤
""" 1 網址所使用的靜態文件默認放在static文件夾下 2 用戶上傳的靜態文件也應該單獨放在某個文件夾下 media配置 該配置可讓用戶上傳的全部文件都固定存放在某一個指定的文件夾下 # 配置用戶上傳的文件存儲位置 MEDIA_ROOT = os.path.join(BASE_DIR,'media') # 文件名 隨你 本身 會自動建立多級目錄 如何開設後端指定文件夾資源 首先你須要本身去urls.py書寫固定的代碼 from django.views.static import serve from BBS14 import settings # 暴露後端指定文件夾資源 url(r'^media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}) """
# 如何避免別的網站直接經過本網站的url訪問本網站資源 # 簡單的防盜 我能夠作到請求來的時候先看看當前請求是從哪一個網站過來的 若是是本網站那麼正常訪問 若是是其餘網站直接拒絕 請求頭裏面有一個專門記錄請求來自於哪一個網址的參數 Referer: http://127.0.0.1:8000/xxx/ # 如何避免 1.要麼修改請求頭referer 2.直接寫爬蟲把對方網址的全部資源直接下載到咱們本身的服務器上
# 全是每一個用戶均可以有本身的站點樣式 <link rel="stylesheet" href="/media/css/{{ blog.site_theme }}/"> id content create_time month 1 111 2020-11-11 2020-11 2 222 2020-11-12 2020-11 3 333 2020-11-13 2020-11 4 444 2020-11-14 2020-11 5 555 2020-11-15 2020-11 """ django官網提供的一個orm語法 from django.db.models.functions import TruncMonth -官方提供 from django.db.models.functions import TruncMonth Sales.objects .annotate(month=TruncMonth('timestamp')) # Truncate to month and add to select list .values('month') # Group By month .annotate(c=Count('id')) # Select the count of the grouping .values('month', 'c') # (might be redundant, haven't tested) select month and count 時區問題報錯 TIME_ZONE = 'Asia/Shanghai' USE_TZ = True """
https://www.cnblogs.com/jason/tag/Python/ 標籤 https://www.cnblogs.com/jason/category/850028.html 分類 https://www.cnblogs.com/jason/archive/2016/10.html 日期 https://www.cnblogs.com/jason/tag/1/ 標籤 https://www.cnblogs.com/jason/category/1 分類 https://www.cnblogs.com/jason/archive/2020-11/ 日期 def site(request,username,**kwargs): """ :param request: :param username: :param kwargs: 若是該參數有值 也就意味着須要對article_list作額外的篩選操做 :return: """ # 先校驗當前用戶名對應的我的站點是否存在 user_obj = models.UserInfo.objects.filter(username=username).first() # 用戶若是不存在應該返回一個404頁面 if not user_obj: return render(request,'errors.html') blog = user_obj.blog # 查詢當前我的站點下的全部的文章 article_list = models.Article.objects.filter(blog=blog) # queryset對象 側邊欄的篩選其實就是對article_list再進一步篩選 if kwargs: # print(kwargs) # {'condition': 'tag', 'param': '1'} condition = kwargs.get('condition') param = kwargs.get('param') # 判斷用戶到底想按照哪一個條件篩選數據 if condition == 'category': article_list = article_list.filter(category_id=param) elif condition == 'tag': article_list = article_list.filter(tags__id=param) else: year,month = param.split('-') # 2020-11 [2020,11] article_list = article_list.filter(create_time__year=year,create_time__month=month) # 1 查詢當前用戶全部的分類及分類下的文章數 category_list = models.Category.objects.filter(blog=blog).annotate(count_num=Count('article__pk')).values_list('name','count_num','pk') # print(category_list) # <QuerySet [('jason的分類一', 2), ('jason的分類二', 1), ('jason的分類三', 1)]> # 2 查詢當前用戶全部的標籤及標籤下的文章數 tag_list = models.Tag.objects.filter(blog=blog).annotate(count_num=Count('article__pk')).values_list('name','count_num','pk') # print(tag_list) # <QuerySet [('tank的標籤一', 1), ('tank的標籤二', 1), ('tank的標籤三', 2)]> # 3 按照年月統計全部的文章 date_list = models.Article.objects.filter(blog=blog).annotate(month=TruncMonth('create_time')).values('month').annotate(count_num=Count('pk')).values_list('month','count_num') # print(date_list) return render(request,'site.html',locals())