cauto 2 years ago
parent
commit
f49bf8b306
14 changed files with 236 additions and 32 deletions
  1. 0 0
      article/__init__.py
  2. 3 0
      article/admin.py
  3. 5 0
      article/apps.py
  4. 0 0
      article/migrations/__init__.py
  5. 37 0
      article/models.py
  6. 3 0
      article/tests.py
  7. 7 0
      article/urls.py
  8. 13 0
      article/views.py
  9. 33 5
      blog/settings.py
  10. 3 21
      blog/urls.py
  11. 6 0
      messages.py
  12. 27 0
      t2.py
  13. 5 3
      user/urls.py
  14. 94 3
      user/views.py

+ 0 - 0
article/__init__.py


+ 3 - 0
article/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 5 - 0
article/apps.py

@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class ArticleConfig(AppConfig):
+    name = 'article'

+ 0 - 0
article/migrations/__init__.py


+ 37 - 0
article/models.py

@@ -0,0 +1,37 @@
+from django.db import models
+from django.contrib.auth.models import User
+
+
+# Create your models here.
+
+
+class Article(models.Model):
+    class Meta:
+        db_table = 'article'
+
+    id = models.BigAutoField(primary_key=True)
+    title = models.CharField(max_length=128, null=False)
+    crate_time = models.DateTimeField(null=False)
+    author = models.ForeignKey(User, on_delete=models.PROTECT)
+
+    def __repr__(self):
+        return "<article : {} {} {}>".format(
+            self.id, self.title, self.crate_time)
+
+    __str__ = __repr__
+
+
+class Content(models.Model):
+    class Meta:
+        db_table = 'content'
+
+    article = models.OneToOneField(
+        Article,
+        on_delete=models.PROTECT,
+        primary_key=True)
+    content = models.TextField(null=True)
+
+    def __repr__(self):
+        return "<Content: {} {} >".format(self.pk, self.content)
+
+    __str__ = __repr__

+ 3 - 0
article/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 7 - 0
article/urls.py

@@ -0,0 +1,7 @@
+from django.urls import path
+from .views import ArticeView
+urlpatterns = [
+     path('', ArticeView.as_view()),  #
+]
+
+

+ 13 - 0
article/views.py

@@ -0,0 +1,13 @@
+#from django.shortcuts import render
+
+# Create your views here.
+from django.http import HttpRequest, HttpResponse, JsonResponse
+from django.views import View
+
+
+class ArticeView(View):
+    def get(self, request):
+        return JsonResponse({'mothod': 'get'})
+
+    def post(self, request):
+        return JsonResponse({'mothod': 'post'})

+ 33 - 5
blog/settings.py

@@ -24,6 +24,32 @@ SECRET_KEY = 'b78ts&g&tzv3l!j%jppy&4kvo+6-3le*^+7m*kmdg#s(zw#&@%'
 # SECURITY WARNING: don't run with debug turned on in production!
 DEBUG = True
 
+LOGGING = {
+    'version': 1,
+    'disable_existing_loggers': False,
+    'handlers': {
+        'console': {
+            'class': 'logging.StreamHandler',
+        },
+    },
+    'root': {
+        'handlers': ['console'],
+        'level': 'WARNING',
+    },
+    'loggers': {
+        'django': {
+            'handlers': ['console'],
+            'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
+            'propagate': False,
+        },
+        'django.db.backends': {
+            'handlers': ['console'],
+            'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
+            'propagate': False,
+        },
+    },
+}
+
 ALLOWED_HOSTS = []
 
 # Application definition
@@ -36,16 +62,18 @@ INSTALLED_APPS = [
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'user',
+    'article',
 ]
 
 MIDDLEWARE = [
     'django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
-    'django.middleware.csrf.CsrfViewMiddleware',
+    # 'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
+    'user.views.SimpleMiddleware',  # 全局过滤
 ]
 
 ROOT_URLCONF = 'blog.urls'
@@ -75,10 +103,10 @@ DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.mysql',
         'NAME': 'cm_blog',
-        'USER': 'root',
-        'PASSWORD': '123456',
-        'HOST': '127.0.0.1',
-        'PORT': '8889',
+        'USER': 'cm_blog',
+        'PASSWORD': 'ajrJZMCLTWAsThCZ',
+        'HOST': '47.243.54.62',
+        'PORT': '3306',
     }
 }
 

+ 3 - 21
blog/urls.py

@@ -16,30 +16,12 @@ Including another URLconf
 from django.contrib import admin
 from django.urls import path , include
 # from  django.shortcuts import HttpResponse
-from django.http import HttpResponse, HttpRequest, JsonResponse
-from django.core.handlers.wsgi import WSGIRequest
-
-
-def index(request: HttpRequest):
-    print(request)
-    print(request.GET)
-
-    keys = ('GET','POST','COOKIES','path','method')
-
-    #response = JsonResponse(dict(map(lambda k: (k, getattr(request, k)), keys)))
-    response = HttpResponse('<html><body><h1>{}</h1></body></html>'.format('abcd'))
-    return response
-
-
-def test(request: WSGIRequest, clz, uid):
-    print('=' * 30)
-    print(clz, uid)
-    return HttpResponse("abc----", charset='utf-8')
+# from django.http import HttpResponse, HttpRequest, JsonResponse
+# from django.core.handlers.wsgi import WSGIRequest
 
 
 urlpatterns = [
     path('admin/', admin.site.urls),
-    path('', index),
-    path('python/<clz>/<uid>', test),
     path('user/', include('user.urls')),
+    path('article/', include('article.urls')),
 ]

+ 6 - 0
messages.py

@@ -0,0 +1,6 @@
+class Messages:
+    BAD_REQUEST = {'code': 1, 'msg': '错误'}
+    USER_EXISTS = {'code': 2, 'msg': '用户名已经存在'}
+    USER_NOT_EXISTS = {'code': 3, 'msg': '用户名不存在或者密码错误'}
+
+

+ 27 - 0
t2.py

@@ -0,0 +1,27 @@
+import os
+import django
+from django.core.wsgi import get_wsgi_application
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'blog.settings')
+django.setup()
+
+import datetime
+
+from article.models import Article, Content
+
+print(datetime.datetime.now(
+    datetime.timezone(datetime.timedelta(hours=8))
+))
+
+# article = Article()
+#
+# try:
+#
+#     article.title = 't1'
+#     article.crate_time = datetime.datetime.now(
+#         datetime.timezone(datetime.timedelta(hours=8))
+#     )
+#     article.author_id = 1
+#     article.save()
+#     print(article.pk)
+# except Exception as e:
+#     print(e)

+ 5 - 3
user/urls.py

@@ -1,6 +1,8 @@
 from django.urls import path
-from .views import reg
+from .views import reg, user_login,user_login_out
 
 urlpatterns = [
-    path('', reg)
-]
+    path('reg', reg),  # post /user
+    path('login', user_login),  # post /user/login
+    path('loginout', user_login_out),
+]

+ 94 - 3
user/views.py

@@ -1,8 +1,99 @@
 from django.shortcuts import render, HttpResponse
-from django.http import HttpRequest
+from django.http import HttpRequest, JsonResponse
 
+from django.views.decorators.http import require_POST, require_GET, require_http_methods
+from django.contrib.auth.models import User
+from django.contrib.auth import authenticate, login as auth_login, logout
+# from django.contrib.sessions import S
+# from django.contrib.auth.decorators import login_required
+import simplejson
+from messages import Messages
+from functools import wraps
 
-# Create your views here.
 
+# 装饰器 验证账号
+def login_required(view_func):
+    @wraps(view_func)
+    def wrapper(request, *args, **kwargs):
+        if request.user.is_authenticated:
+            return view_func(request, *args, **kwargs)
+        else:
+            return HttpResponse(status=401)
+
+    return wrapper
+
+
+# # 包装函数 装饰器
+# def request_methods(methods):
+#     def method(func):
+#         def wrapper(request, *args, **kwargs):
+#             if request.method.lower() in methods:
+#                 ret = func(request, *args, **kwargs)
+#                 return ret
+#             else:
+#                 return JsonResponse({}, status=405)
+#         return wrapper
+#     return method
+
+
+@require_POST
 def reg(request: HttpRequest):
-    return HttpResponse('hello')
+    try:
+        payload = simplejson.loads(request.body)
+        username = payload['username']
+        count = User.objects.filter(username=username).count()
+        if count > 0:
+            return JsonResponse(Messages.USER_EXISTS)
+        username = username
+        email = payload['email']
+        password = payload['password']
+        user = User.objects.create_user(username, email, password)
+        return JsonResponse({}, status=201)
+    except Exception as e:
+        print(e)
+        return JsonResponse(Messages.BAD_REQUEST, status=200)
+
+
+@require_POST
+def user_login(request: HttpRequest):
+    try:
+        payload = simplejson.loads(request.body)
+        username = payload['username']
+        password = payload['password']
+        # 判断用户是否存在
+        user = authenticate(username=username, password=password)
+        if user is None:
+            return JsonResponse(Messages.USER_NOT_EXISTS)
+
+        auth_login(request, user)
+        session = request.session
+        session.set_expiry(30)
+        session['userinfo'] = {
+            'id': request.user.id,
+            'username': request.user.username
+        }
+        response = HttpResponse(status=204)
+        # response.set_cookie('username')
+        return response
+    except Exception as e:
+        print(e)
+        return JsonResponse({}, status=200)
+
+
+@login_required
+def user_login_out(request: HttpRequest):
+    logout(request)
+    return HttpResponse(status=302)
+
+
+class SimpleMiddleware:
+    def __init__(self, get_response):
+        self.get_response = get_response
+
+    def __call__(self, request):
+        response = self.get_response(request)
+
+        return response
+
+    def process_view(self, request, view_func, view_args, view_kwargs):
+        return None