├── db.sqlite3 ├── manage.py ├── news ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-34.pyc │ ├── settings.cpython-34.pyc │ ├── urls.cpython-34.pyc │ └── wsgi.cpython-34.pyc ├── settings.py ├── urls.py └── wsgi.py ├── newswebsite ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-34.pyc │ ├── admin.cpython-34.pyc │ ├── api.cpython-34.pyc │ ├── forms.cpython-34.pyc │ ├── models.cpython-34.pyc │ └── views.cpython-34.pyc ├── admin.py ├── api.py ├── apps.py ├── forms.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_remove_comment_to_user.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-34.pyc │ │ ├── 0002_remove_comment_to_user.cpython-34.pyc │ │ └── __init__.cpython-34.pyc ├── models.py ├── tests.py └── views.py ├── static ├── css │ ├── category.css │ ├── detail.css │ ├── index.css │ ├── login.css │ ├── profile.css │ ├── register.css │ ├── semantic.css │ └── themes │ │ └── default │ │ └── assets │ │ ├── fonts │ │ ├── icons.eot │ │ ├── icons.otf │ │ ├── icons.svg │ │ ├── icons.ttf │ │ ├── icons.woff │ │ └── icons.woff2 │ │ └── images │ │ └── flags.png ├── images │ ├── avatar.png │ ├── detail │ │ ├── TOP.png │ │ ├── Triangle.png │ │ ├── ad.png │ │ ├── articleimg1.png │ │ ├── articleimg2.png │ │ ├── avatar2.png │ │ ├── avatar_jack.png │ │ ├── avatar_jack2.png │ │ ├── avatar_matt.png │ │ ├── avatar_yangjing.png │ │ ├── cover1.png │ │ ├── cover2.png │ │ ├── dotline.png │ │ ├── icon.png │ │ ├── login.png │ │ ├── qrcode.png │ │ ├── recommend_img1.png │ │ ├── recommend_img2.png │ │ ├── recommend_img3.png │ │ ├── register.png │ │ ├── sideimg1.png │ │ ├── sideimg2.png │ │ ├── sideimg3.png │ │ ├── upicon.png │ │ └── zhiribao.png │ ├── index │ │ ├── TOP.png │ │ ├── Triangle.png │ │ ├── ad.png │ │ ├── articleimg1.png │ │ ├── articleimg2.png │ │ ├── articleimg3.png │ │ ├── articleimg4.png │ │ ├── articleimg5.png │ │ ├── avatar.png │ │ ├── bluetag.png │ │ ├── coverimg.png │ │ ├── icon.png │ │ ├── img1.png │ │ ├── img2.png │ │ ├── img3.png │ │ ├── img4.png │ │ ├── login.png │ │ ├── qrcode.png │ │ ├── redtag.png │ │ ├── register.png │ │ ├── sideimg1.png │ │ ├── sideimg2.png │ │ ├── sideimg3.png │ │ ├── upicon.png │ │ ├── white_zhiribao.png │ │ ├── yellowtag.png │ │ └── zhiribao.png │ ├── login.png │ ├── login │ │ ├── UnCheckedbox.png │ │ ├── backgroundimg.png │ │ ├── checkboxicon.png │ │ ├── homeicon.png │ │ ├── lockicon.png │ │ ├── passwordicon.png │ │ ├── usericon.png │ │ └── zhiribao.png │ ├── profile │ │ ├── fav1.png │ │ ├── fav2.png │ │ ├── fav3.png │ │ ├── fav4.png │ │ ├── fav5.png │ │ ├── homeicon.png │ │ ├── lockicon.png │ │ ├── usericon.png │ │ └── zhiribao.png │ └── register.png └── js │ ├── reqwest.js │ ├── vue.js │ └── vue1.js ├── templates ├── category.html ├── detail.html ├── index.html ├── login.html ├── profile.html └── register.html └── upload ├── article_image ├── articleimg1.png ├── articleimg1_8nSvPmx.png ├── articleimg2.png ├── articleimg4.png ├── articleimg4_35AroG4.png ├── cate_articleimg2.png ├── cover1.png ├── coverimg.png ├── sideimg3.png └── 潜艇5.jpg ├── author_avatar ├── avatar_jack.png ├── avatar_jack2.png ├── avatar_jack_4XiOWu9.png ├── avatar_jack_Ug5u9lO.png ├── avatar_matt.png ├── avatar_matt_X3qlYj3.png ├── avatar_matt_lMwRSw2.png ├── avatar_matt_sRAJhT7.png ├── avatar_yangjing.png └── fav5.png └── avatar ├── CSS定位练习1.jpg ├── CSS定位练习1_WUQSOGr.jpg ├── CSS定位练习1_qQOp3PZ.jpg ├── CSS练习.jpg ├── avatar.png ├── css定位练习2.jpg ├── css定位练习2_9hNVaAw.jpg ├── django安装.jpg ├── landing_page.jpg ├── landing_page_6RuDiGQ.jpg ├── landing_page_OUJmmQF.jpg ├── landing_page_ZJLH3cz.jpg └── 谢源祥照片.JPG /db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/db.sqlite3 -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "news.settings") 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError: 10 | # The above import may fail for some other reason. Ensure that the 11 | # issue is really that Django is missing to avoid masking other 12 | # exceptions on Python 2. 13 | try: 14 | import django 15 | except ImportError: 16 | raise ImportError( 17 | "Couldn't import Django. Are you sure it's installed and " 18 | "available on your PYTHONPATH environment variable? Did you " 19 | "forget to activate a virtual environment?" 20 | ) 21 | raise 22 | execute_from_command_line(sys.argv) 23 | -------------------------------------------------------------------------------- /news/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/news/__init__.py -------------------------------------------------------------------------------- /news/__pycache__/__init__.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/news/__pycache__/__init__.cpython-34.pyc -------------------------------------------------------------------------------- /news/__pycache__/settings.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/news/__pycache__/settings.cpython-34.pyc -------------------------------------------------------------------------------- /news/__pycache__/urls.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/news/__pycache__/urls.cpython-34.pyc -------------------------------------------------------------------------------- /news/__pycache__/wsgi.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/news/__pycache__/wsgi.cpython-34.pyc -------------------------------------------------------------------------------- /news/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for news project. 3 | 4 | Generated by 'django-admin startproject' using Django 1.10.3. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.10/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/1.10/ref/settings/ 11 | """ 12 | 13 | import os 14 | 15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = '8$eq6cpg(h-+hma^$=%ys$qnyqerx-73y_k*&jgv_@1$-3@z+#' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | 'django.contrib.admin', 35 | 'django.contrib.auth', 36 | 'django.contrib.contenttypes', 37 | 'django.contrib.sessions', 38 | 'django.contrib.messages', 39 | 'django.contrib.staticfiles', 40 | 'newswebsite', 41 | 'rest_framework', 42 | 'rest_framework.authtoken' 43 | ] 44 | 45 | MIDDLEWARE = [ 46 | 'django.middleware.security.SecurityMiddleware', 47 | 'django.contrib.sessions.middleware.SessionMiddleware', 48 | 'django.middleware.common.CommonMiddleware', 49 | 'django.middleware.csrf.CsrfViewMiddleware', 50 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 51 | 'django.contrib.messages.middleware.MessageMiddleware', 52 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 53 | ] 54 | 55 | ROOT_URLCONF = 'news.urls' 56 | 57 | TEMPLATES = [ 58 | { 59 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 60 | 'DIRS': [os.path.join(BASE_DIR, 'templates').replace("//", "/")], 61 | 'APP_DIRS': True, 62 | 'OPTIONS': { 63 | 'context_processors': [ 64 | 'django.template.context_processors.debug', 65 | 'django.template.context_processors.request', 66 | 'django.contrib.auth.context_processors.auth', 67 | 'django.contrib.messages.context_processors.messages', 68 | ], 69 | }, 70 | }, 71 | ] 72 | 73 | WSGI_APPLICATION = 'news.wsgi.application' 74 | 75 | 76 | # Database 77 | # https://docs.djangoproject.com/en/1.10/ref/settings/#databases 78 | 79 | DATABASES = { 80 | 'default': { 81 | 'ENGINE': 'django.db.backends.sqlite3', 82 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 83 | } 84 | } 85 | 86 | 87 | # Password validation 88 | # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators 89 | 90 | AUTH_PASSWORD_VALIDATORS = [ 91 | { 92 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 93 | }, 94 | { 95 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 96 | }, 97 | { 98 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 99 | }, 100 | { 101 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 102 | }, 103 | ] 104 | 105 | 106 | # Internationalization 107 | # https://docs.djangoproject.com/en/1.10/topics/i18n/ 108 | 109 | LANGUAGE_CODE = 'en-us' 110 | 111 | TIME_ZONE = 'UTC' 112 | 113 | USE_I18N = True 114 | 115 | USE_L10N = True 116 | 117 | USE_TZ = True 118 | 119 | 120 | # Static files (CSS, JavaScript, Images) 121 | # https://docs.djangoproject.com/en/1.10/howto/static-files/ 122 | 123 | STATIC_URL = '/static/' 124 | MEDIA_URL = '/upload/' 125 | MEDIA_ROOT = os.path.join(BASE_DIR, 'upload').replace("//", "/") 126 | 127 | STATICFILES_DIRS = (os.path.join('static'),) 128 | -------------------------------------------------------------------------------- /news/urls.py: -------------------------------------------------------------------------------- 1 | """news URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/1.10/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.conf.urls import url, include 14 | 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 15 | """ 16 | from django.conf.urls import url 17 | from django.contrib import admin 18 | from newswebsite.views import * 19 | from newswebsite.api import * 20 | from django.conf import settings 21 | from django.conf.urls.static import static 22 | from rest_framework.authtoken import views 23 | urlpatterns = [ 24 | url(r'^admin/', admin.site.urls), 25 | url(r'^index/', index, name='index'), 26 | url(r'^category/(?P\d+)/$', category, name='category'), 27 | url(r'^detail/(?P\d+)/$', detail, name='detail'), 28 | url(r'^login/', login, name='login'), 29 | url(r'^register/', register, name='register'), 30 | url(r'^logout/', logout, name='logout'), 31 | url(r'^profile/', profile, name='profile'), 32 | 33 | #api 34 | url(r'^api/index/', api_index, name='api_index'), 35 | url(r'^api/category/(?P\d+)/$', api_category, name='api_category'), 36 | url(r'^api/detail/(?P\d+)/$', api_detail, name='api_detail'), 37 | url(r'^api/token-auth/$', views.obtain_auth_token), 38 | ] 39 | 40 | if settings.DEBUG: 41 | urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 42 | urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 43 | -------------------------------------------------------------------------------- /news/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for news project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "news.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /newswebsite/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/newswebsite/__init__.py -------------------------------------------------------------------------------- /newswebsite/__pycache__/__init__.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/newswebsite/__pycache__/__init__.cpython-34.pyc -------------------------------------------------------------------------------- /newswebsite/__pycache__/admin.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/newswebsite/__pycache__/admin.cpython-34.pyc -------------------------------------------------------------------------------- /newswebsite/__pycache__/api.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/newswebsite/__pycache__/api.cpython-34.pyc -------------------------------------------------------------------------------- /newswebsite/__pycache__/forms.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/newswebsite/__pycache__/forms.cpython-34.pyc -------------------------------------------------------------------------------- /newswebsite/__pycache__/models.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/newswebsite/__pycache__/models.cpython-34.pyc -------------------------------------------------------------------------------- /newswebsite/__pycache__/views.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/newswebsite/__pycache__/views.cpython-34.pyc -------------------------------------------------------------------------------- /newswebsite/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from newswebsite.models import * 3 | # Register your models here. 4 | admin.site.register(Article) 5 | admin.site.register(Category) 6 | admin.site.register(Best) 7 | admin.site.register(UserProfile) 8 | admin.site.register(Comment) 9 | -------------------------------------------------------------------------------- /newswebsite/api.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | from rest_framework.response import Response 3 | from rest_framework.decorators import api_view 4 | from rest_framework import status 5 | from django.contrib.auth.models import User 6 | from .models import * 7 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 8 | 9 | from rest_framework.decorators import api_view, authentication_classes 10 | from rest_framework.authentication import TokenAuthentication 11 | 12 | class CategorySerializer(serializers.ModelSerializer): 13 | class Meta: 14 | model = Category 15 | fields = '__all__' 16 | depth = 1 17 | 18 | class ArticleSerializer(serializers.ModelSerializer): 19 | class Meta: 20 | model = Article 21 | fields = '__all__' 22 | depth = 1 23 | 24 | class UserSerializer(serializers.ModelSerializer): 25 | class Meta: 26 | model = User 27 | fields = ('id','profile','username') 28 | depth = 1 29 | 30 | class CommentSerializer(serializers.ModelSerializer): 31 | belong_user = UserSerializer() 32 | class Meta: 33 | model = Comment 34 | fields = '__all__' 35 | depth = 1 36 | 37 | @api_view(['GET']) 38 | def api_index(request): #首页api 39 | cates = Category.objects.all().order_by("-id") #分类列表 40 | cates = CategorySerializer(cates,many=True) 41 | 42 | todaynew_big = Best.objects.filter(select_reason="今日新闻")[0].select_article #取出一篇今日新闻作为大标题 43 | todaynew_big = ArticleSerializer(todaynew_big) 44 | todaynew = Best.objects.filter(select_reason="今日新闻")[:3] 45 | todaynew_top3 = [i.select_article for i in todaynew] #取出三篇今日新闻 46 | todaynew_top3 = ArticleSerializer(todaynew_top3,many=True) 47 | 48 | index_recommend = Best.objects.filter(select_reason="首页推荐")[:4] 49 | index_recommendlist = [i.select_article for i in index_recommend] #取出四篇首页推荐 50 | index_recommendlist = ArticleSerializer(index_recommendlist,many=True) 51 | 52 | editor_recommendtop3 = Best.objects.filter(select_reason="编辑推荐")[:3] 53 | editor_recommendtop3list = [i.select_article for i in editor_recommendtop3] #取出三篇编辑推荐作为大标题 54 | editor_recommendtop3list = ArticleSerializer(editor_recommendtop3list,many=True) 55 | 56 | editor_recommend = Best.objects.filter(select_reason="编辑推荐")[3:10] 57 | editor_recommendlist = [i.select_article for i in editor_recommend] #再取出七篇编辑推荐 58 | editor_recommendlist = ArticleSerializer(editor_recommendlist,many=True) 59 | 60 | article_list = Article.objects.all().order_by("-publish_time") #取出所有文章 61 | pagerobot = Paginator(article_list,5) #创建分页器,每页限定五篇文章 62 | page_num = request.GET.get("page") #取到当前页数 63 | try: 64 | article_list = pagerobot.page(page_num) #一般情况下返回当前页码下的文章 65 | except EmptyPage: 66 | article_list = pagerobot.page(pagerobot.num_pages) #如果不存在该业,返回最后一页 67 | except PageNotAnInteger: 68 | article_list = pagerobot.page(1) #如果页码不是一个整数,返回第一页 69 | pages = len(article_list.paginator.page_range) #取总页数 70 | 71 | article_list = ArticleSerializer(article_list,many=True) 72 | 73 | context={} 74 | context={ 75 | "cates":cates.data, 76 | "todaynew_big":todaynew_big.data, 77 | "todaynew_top3":todaynew_top3.data, 78 | "index_recommendlist":index_recommendlist.data, 79 | "editor_recommendtop3list":editor_recommendtop3list.data, 80 | "editor_recommendlist":editor_recommendlist.data, 81 | "pages":pages, 82 | "article_list":article_list.data 83 | } 84 | 85 | 86 | return Response(context) 87 | 88 | @api_view(['GET']) 89 | def api_category(request,cate_id): 90 | cates = Category.objects.all().order_by("-id") #分类列表 91 | cates = CategorySerializer(cates,many=True) 92 | 93 | editor_recommendtop3 = Best.objects.filter(select_reason="编辑推荐")[:3] 94 | editor_recommendtop3list = [i.select_article for i in editor_recommendtop3] #取出三篇编辑推荐作为大标题 95 | editor_recommendtop3list = ArticleSerializer(editor_recommendtop3list,many=True) 96 | 97 | editor_recommend = Best.objects.filter(select_reason="编辑推荐")[3:10] 98 | editor_recommendlist = [i.select_article for i in editor_recommend] #再取出七篇编辑推荐 99 | editor_recommendlist = ArticleSerializer(editor_recommendlist,many=True) 100 | 101 | article_list = Article.objects.filter(category=int(cate_id)).order_by("-publish_time") #取出当前目录下的所有文章 102 | print(article_list[0].category) 103 | pagerobot = Paginator(article_list,5) #创建分页器,每页限定五篇文章 104 | page_num = request.GET.get("page") #取到当前页数 105 | try: 106 | article_list = pagerobot.page(page_num) #一般情况下返回当前页码下的文章 107 | except EmptyPage: 108 | article_list = pagerobot.page(pagerobot.num_pages) #如果不存在该业,返回最后一页 109 | except PageNotAnInteger: 110 | article_list = pagerobot.page(1) #如果页码不是一个整数,返回第一页 111 | pages = len(article_list.paginator.page_range) #取总页数 112 | 113 | article_list = ArticleSerializer(article_list,many=True) 114 | 115 | context={} 116 | context={ 117 | "cates":cates.data, 118 | "editor_recommendtop3list":editor_recommendtop3list.data, 119 | "editor_recommendlist":editor_recommendlist.data, 120 | "pages":pages, 121 | "article_list":article_list.data 122 | } 123 | 124 | 125 | return Response(context) 126 | 127 | @api_view(['GET','POST']) 128 | @authentication_classes((TokenAuthentication,)) 129 | def api_detail(request,article_id): 130 | if request.method == 'POST': 131 | article_id = request.POST.get('article_id') 132 | current_article = Article.objects.get(id=article_id) 133 | current_user = User.objects.get(id=request.user.id) 134 | created = request.POST.get('created') 135 | words = request.POST.get('words') 136 | newcomment = Comment(belong_article=current_article,belong_user=current_user,created=created,words=words) 137 | newcomment.save() 138 | return Response(status=status.HTTP_201_CREATED) 139 | cates = Category.objects.all().order_by("-id") #分类列表 140 | cates = CategorySerializer(cates,many=True) 141 | 142 | editor_recommendtop3 = Best.objects.filter(select_reason="编辑推荐")[:3] 143 | editor_recommendtop3list = [i.select_article for i in editor_recommendtop3] #取出三篇编辑推荐作为大标题 144 | editor_recommendtop3list = ArticleSerializer(editor_recommendtop3list,many=True) 145 | 146 | editor_recommend = Best.objects.filter(select_reason="编辑推荐")[3:10] 147 | editor_recommendlist = [i.select_article for i in editor_recommend] #再取出七篇编辑推荐 148 | editor_recommendlist = ArticleSerializer(editor_recommendlist,many=True) 149 | 150 | article = Article.objects.get(id=article_id) 151 | comments = Comment.objects.filter(belong_article_id=article_id) 152 | comments = CommentSerializer(comments,many=True) 153 | article = ArticleSerializer(article) 154 | 155 | context ={} 156 | context ={ 157 | "cates":cates.data, 158 | "editor_recommendtop3list":editor_recommendtop3list.data, 159 | "editor_recommendlist":editor_recommendlist.data, 160 | "article":article.data, 161 | "comments":comments.data, 162 | 163 | } 164 | 165 | return Response(context) 166 | -------------------------------------------------------------------------------- /newswebsite/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class NewswebsiteConfig(AppConfig): 5 | name = 'newswebsite' 6 | -------------------------------------------------------------------------------- /newswebsite/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from django.contrib.auth.models import User 3 | from django.core.exceptions import ValidationError 4 | from django.core.validators import validate_email 5 | 6 | 7 | 8 | 9 | 10 | 11 | class LoginForm(forms.Form): 12 | username = forms.CharField(widget=forms.TextInput(attrs={'placeholder':'用户名'})) 13 | password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'密码'})) 14 | 15 | class RegisterForm(forms.Form): 16 | username = forms.CharField(widget=forms.TextInput(attrs={'placeholder':'用户名'})) 17 | email = forms.CharField(widget=forms.TextInput(attrs={'placeholder':'邮箱'})) 18 | password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'密码'})) 19 | password_confirm = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'确认密码'})) 20 | 21 | def clean(self): 22 | cleaned_data = super(RegisterForm,self).clean() 23 | username = cleaned_data.get("username") 24 | email = cleaned_data.get("email") 25 | password = cleaned_data.get("password") 26 | password_confirm = cleaned_data.get("password_confirm") 27 | 28 | if User.objects.filter(username=username): 29 | raise forms.ValidationError("用户已存在") 30 | if User.objects.filter(email=email): 31 | raise forms.ValidationError("该邮箱已被注册") 32 | 33 | try: 34 | validate_email(email) 35 | except ValidationError: 36 | raise forms.ValidationError("不正确的邮箱格式") 37 | 38 | if len(password) < 6: 39 | raise forms.ValidationError("密码长度至少6位") 40 | 41 | if password_confirm != password: 42 | raise forms.ValidationError("两次输入的密码不一致") 43 | 44 | class EditForm(forms.Form): 45 | email = forms.CharField(widget=forms.TextInput(attrs={'placeholder':'邮箱'})) 46 | password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'密码'}),required=False) 47 | password_confirm = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'确认密码'}),required=False) 48 | avatar = forms.FileField(label="上传头像",required=False) 49 | 50 | def clean(self): 51 | cleaned_data = super(EditForm,self).clean() 52 | email = cleaned_data.get("email") 53 | password = cleaned_data.get("password") 54 | password_confirm = cleaned_data.get("password_confirm") 55 | 56 | 57 | try: 58 | validate_email(email) 59 | except ValidationError: 60 | raise forms.ValidationError("不正确的邮箱格式") 61 | 62 | if len(password) < 6: 63 | raise forms.ValidationError("密码长度至少6位") 64 | 65 | if password_confirm != password: 66 | raise forms.ValidationError("两次输入的密码不一致") 67 | -------------------------------------------------------------------------------- /newswebsite/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2017-04-08 14:23 3 | from __future__ import unicode_literals 4 | 5 | from django.conf import settings 6 | from django.db import migrations, models 7 | import django.db.models.deletion 8 | import django.utils.timezone 9 | 10 | 11 | class Migration(migrations.Migration): 12 | 13 | initial = True 14 | 15 | dependencies = [ 16 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 17 | ] 18 | 19 | operations = [ 20 | migrations.CreateModel( 21 | name='Article', 22 | fields=[ 23 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 24 | ('title', models.CharField(max_length=100)), 25 | ('intro', models.CharField(max_length=1000)), 26 | ('abstract', models.TextField()), 27 | ('content', models.TextField()), 28 | ('publish_time', models.DateTimeField(default=django.utils.timezone.now)), 29 | ('image', models.FileField(upload_to='article_image')), 30 | ('source_link', models.CharField(max_length=200)), 31 | ('author_name', models.CharField(max_length=100)), 32 | ('author_avatar', models.FileField(upload_to='author_avatar')), 33 | ('author_desc', models.CharField(max_length=100)), 34 | ], 35 | ), 36 | migrations.CreateModel( 37 | name='Best', 38 | fields=[ 39 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 40 | ('select_reason', models.CharField(choices=[('今日新闻', '今日新闻'), ('首页推荐', '首页推荐'), ('编辑推荐', '编辑推荐')], max_length=50)), 41 | ('select_article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='select_article', to='newswebsite.Article')), 42 | ], 43 | ), 44 | migrations.CreateModel( 45 | name='Category', 46 | fields=[ 47 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 48 | ('name', models.CharField(max_length=40)), 49 | ], 50 | ), 51 | migrations.CreateModel( 52 | name='Comment', 53 | fields=[ 54 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 55 | ('words', models.CharField(max_length=200)), 56 | ('created', models.DateTimeField(default=django.utils.timezone.now)), 57 | ('belong_article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='article', to='newswebsite.Article')), 58 | ('belong_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL)), 59 | ('to_user', models.ForeignKey(default=0, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='to_user', to=settings.AUTH_USER_MODEL)), 60 | ], 61 | ), 62 | migrations.CreateModel( 63 | name='UserProfile', 64 | fields=[ 65 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 66 | ('avatar', models.FileField(upload_to='avatar')), 67 | ('belong_to', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL)), 68 | ], 69 | ), 70 | migrations.AddField( 71 | model_name='article', 72 | name='category', 73 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cate', to='newswebsite.Category'), 74 | ), 75 | ] 76 | -------------------------------------------------------------------------------- /newswebsite/migrations/0002_remove_comment_to_user.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2017-04-13 15:08 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('newswebsite', '0001_initial'), 12 | ] 13 | 14 | operations = [ 15 | migrations.RemoveField( 16 | model_name='comment', 17 | name='to_user', 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /newswebsite/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/newswebsite/migrations/__init__.py -------------------------------------------------------------------------------- /newswebsite/migrations/__pycache__/0001_initial.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/newswebsite/migrations/__pycache__/0001_initial.cpython-34.pyc -------------------------------------------------------------------------------- /newswebsite/migrations/__pycache__/0002_remove_comment_to_user.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/newswebsite/migrations/__pycache__/0002_remove_comment_to_user.cpython-34.pyc -------------------------------------------------------------------------------- /newswebsite/migrations/__pycache__/__init__.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/newswebsite/migrations/__pycache__/__init__.cpython-34.pyc -------------------------------------------------------------------------------- /newswebsite/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.contrib.auth.models import User 3 | from django.utils.timezone import now 4 | 5 | 6 | # 分类表 7 | class Category(models.Model): 8 | name = models.CharField(max_length=40, null=False) # 分类名 9 | 10 | def __str__(self): 11 | return self.name 12 | 13 | 14 | # 文章表 15 | class Article(models.Model): 16 | title = models.CharField(max_length=100, null=False) # 标题 17 | intro = models.CharField(max_length=1000) # 导语 18 | abstract = models.TextField() # 摘要 19 | category = models.ForeignKey(Category, related_name="cate") #连接分类表的外键,多对一关系 20 | content = models.TextField(null=False) # 内容 21 | publish_time = models.DateTimeField(null=False, default=now) # 发布时间 22 | image = models.FileField(upload_to='article_image') # 文章配图 23 | source_link = models.CharField(max_length=200) # 原文链接 24 | author_name = models.CharField(max_length=100, null=False) # 作者名字 25 | author_avatar = models.FileField(upload_to='author_avatar') # 作者头像 26 | author_desc = models.CharField(max_length=100, null=False) # 作者签名 27 | 28 | def __str__(self): 29 | return self.title #在后台中以文章标题显示 30 | 31 | 32 | # 精选文章 33 | class Best(models.Model): 34 | select_article = models.ForeignKey(Article, related_name='select_article') # 被精选的文章 35 | SELECT_REASON = ( 36 | ('今日新闻', '今日新闻'), 37 | ('首页推荐', '首页推荐'), 38 | ('编辑推荐', '编辑推荐') 39 | ) 40 | select_reason = models.CharField(choices=SELECT_REASON, max_length=50, null=False) # 精选的理由 41 | 42 | def __str__(self): 43 | return self.select_reason + '-' + self.select_article.title 44 | 45 | 46 | # 用户信息表 47 | class UserProfile(models.Model): 48 | belong_to = models.OneToOneField(to=User, related_name="profile") # 所属用户 49 | avatar = models.FileField(upload_to='avatar') # 用户头像 50 | 51 | def __str__(self): 52 | return self.belong_to.username 53 | 54 | 55 | # 评论表 56 | class Comment(models.Model): 57 | belong_article = models.ForeignKey(Article, related_name='article') # 评论所属的文章 58 | belong_user = models.ForeignKey(User, related_name='user') # 评论者 59 | words = models.CharField(max_length=200, null=False) # 评论内容 60 | created = models.DateTimeField(null=False, default=now) # 评论时间 61 | 62 | def __str__(self): 63 | return self.belong_user.username + ': ' + self.words 64 | -------------------------------------------------------------------------------- /newswebsite/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /newswebsite/views.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.decorators import login_required 2 | from django.shortcuts import render,Http404, redirect, HttpResponse 3 | from django.contrib.auth import authenticate,login as user_login,logout as user_logout 4 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 5 | from newswebsite.models import * 6 | from newswebsite.forms import * 7 | from rest_framework.authtoken.models import Token 8 | # Create your views here. 9 | def index(request): 10 | 11 | return render(request,'index.html') 12 | 13 | def category(request,cate_id): 14 | 15 | return render(request,'category.html') 16 | 17 | def detail(request,article_id): 18 | if not isinstance(request.user, User): 19 | return render(request, 'detail.html') 20 | token, created = Token.objects.get_or_create(user=request.user) #创建登录用户的token并存到cookie中 21 | response = render(request, 'detail.html') 22 | response.set_cookie(key='token',value=token.key) 23 | return response 24 | 25 | def login(request): 26 | if request.method == 'GET': 27 | form = LoginForm() 28 | if request.method == 'POST': 29 | form = LoginForm(request.POST) 30 | if form.is_valid(): 31 | username = form.cleaned_data.get("username") 32 | password = form.cleaned_data.get("password") 33 | user = authenticate(username=username,password=password) 34 | if user: 35 | user_login(request,user) #由于login方法和我自定义的login视图重名,这里将django.contrib.auth中的login方法重命名为user_login导入 36 | return redirect(to='index') 37 | else: 38 | return HttpResponse('用户名不存在或用户名密码错误') 39 | 40 | context={} 41 | context['form'] = form 42 | 43 | return render(request,'login.html',context=context) 44 | 45 | def register(request): 46 | if request.method == 'GET': 47 | form = RegisterForm() 48 | if request.method == 'POST': 49 | form = RegisterForm(request.POST) 50 | if form.is_valid(): 51 | username = form.cleaned_data.get("username") 52 | email = form.cleaned_data.get("email") 53 | password = form.cleaned_data.get("password") 54 | user = User(username=username,email=email) 55 | user.set_password(password) 56 | user.save() #创建用户保存 57 | userprofile = UserProfile(belong_to=user,avatar='avatar/avatar.png') 58 | userprofile.save() #创建该用户的资料 59 | return redirect(to='login') 60 | 61 | context={} 62 | context['form']=form 63 | 64 | return render(request,'register.html',context=context) 65 | 66 | @login_required(login_url='login') #未登录则跳转到登录页面 67 | def profile(request): 68 | if request.method == 'GET': 69 | form = EditForm(initial={'username':request.user.username,'email':request.user.email}) 70 | if request.method == 'POST': 71 | form = EditForm(request.POST,request.FILES) 72 | 73 | if form.is_valid(): 74 | user = request.user 75 | email = form.cleaned_data.get("email") 76 | password = form.cleaned_data.get("password") 77 | avatar = form.cleaned_data.get("avatar") 78 | user.email = email 79 | if avatar: 80 | user_profile = UserProfile.objects.get(belong_to=user) 81 | user_profile.avatar = avatar 82 | user_profile.save() #如果有上传头像,替换用户的头像 83 | user.set_password(password) 84 | user.save() 85 | return redirect(to='login') 86 | 87 | context={} 88 | context['form']=form 89 | 90 | return render(request,'profile.html',context=context) 91 | 92 | def logout(request): 93 | user_logout(request) 94 | 95 | return redirect(to='login') 96 | -------------------------------------------------------------------------------- /static/css/category.css: -------------------------------------------------------------------------------- 1 | a{color: black} 2 | .ui.red.basic.segment.topmenu{ 3 | height: 100px; 4 | padding-left:140px; 5 | padding-right: 140px; 6 | border-bottom: 1px solid rgb(189, 189, 189); 7 | } 8 | .ui.borderless.menu.container > .item > a{ 9 | color: black; 10 | font-weight: bold; 11 | } 12 | 13 | .ui.basic.segment.title{ 14 | background: rgba(110, 110, 110,0.7); 15 | position: absolute; 16 | width: 100%; 17 | height: 70px; 18 | left:0; 19 | bottom: 0; 20 | } 21 | .ui.horizontal.basic.segments.bodycontent{ 22 | padding-top: 20px; 23 | border-radius: 0; 24 | border: none; 25 | box-shadow: none; 26 | } 27 | .ui.segment.bodyleft{ 28 | width: 700px; 29 | } 30 | .ui.segment.bodyright{ 31 | width: 100px; 32 | } 33 | .ui.segment.article{ 34 | padding: 0; 35 | border-radius: 0; 36 | height: 200px; 37 | width: 820px; 38 | } 39 | .ui.segment.article > .ui.image{ 40 | float: left; 41 | margin: 0; 42 | } 43 | .ui.segment.articlecontent{ 44 | position: relative; 45 | margin: 0; 46 | padding: 0; 47 | width: 400px; 48 | height: 200px; 49 | float: right; 50 | padding-left: 10px; 51 | } 52 | .ui.segment.articlecontent > p{ 53 | color:rgb(206, 208, 204) 54 | } 55 | .ui.segment.article > .ui.image >img{ 56 | height: 200px; 57 | width:400px; 58 | } 59 | .ui.red.segment.best{ 60 | border-left:none; 61 | border-right:none; 62 | border-bottom:none; 63 | box-shadow:none; 64 | border-radius: 0; 65 | padding-left: 0; 66 | padding-right: 0; 67 | } 68 | .ui.segment.top3{ 69 | height: 120px; 70 | padding-top: 0; 71 | position: relative; 72 | border: none; 73 | box-shadow: none; 74 | } 75 | .sidebutton > p{ 76 | position: absolute; 77 | top:0; 78 | left:20px; 79 | color:white; 80 | } 81 | .ui.segment.bestlast{ 82 | border-radius: 0; 83 | height: 60px; 84 | padding-top: 0; 85 | border: none; 86 | box-shadow: none; 87 | } 88 | .ui.segment.bestlast > img{ 89 | position: absolute; 90 | top:4px; 91 | left:0; 92 | } 93 | .ui.segment.bestlast > p{ 94 | font-size: 12px; 95 | } 96 | .ui.segment.bestlast > span{ 97 | font-size: 12px; 98 | color: rgb(206, 208, 204); 99 | position: absolute; 100 | bottom: 0; 101 | } 102 | .ui.basic.segment.bottomblack{ 103 | height: 400px; 104 | background-color: rgb(50,50,50); 105 | padding-left: 250px; 106 | padding-top: 100px; 107 | } 108 | .ui.circular.red.button.backtotop{ 109 | height: 60px; 110 | position: absolute; 111 | transform: translate(-50%,-50%); 112 | left: 50%; 113 | bottom:-15%; 114 | } 115 | .ui.basic.segment.wechat{ 116 | position: absolute; 117 | top:80px; 118 | right: 250px; 119 | margin-top: 0; 120 | } 121 | .ui.basic.segment.bottomwhite{ 122 | padding-left: 250px; 123 | border-bottom: 2px solid red; 124 | } 125 | .ui.basic.segment.bottomwhite > p{ 126 | font-size: 20px; 127 | } 128 | -------------------------------------------------------------------------------- /static/css/detail.css: -------------------------------------------------------------------------------- 1 | a{color:black;} 2 | .ui.red.basic.segment.topmenu{ 3 | height: 100px; 4 | padding-left:140px; 5 | padding-right: 140px; 6 | border-bottom: 1px solid rgb(189, 189, 189); 7 | } 8 | .ui.borderless.menu.container > .item > a{ 9 | color: black; 10 | font-weight: bold; 11 | } 12 | 13 | .ui.basic.segment.title{ 14 | background: rgba(110, 110, 110,0.7); 15 | position: absolute; 16 | width: 100%; 17 | height: 70px; 18 | left:0; 19 | bottom: 0; 20 | } 21 | .ui.horizontal.basic.segments.bodycontent{ 22 | padding-top: 20px; 23 | border-radius: 0; 24 | border: none; 25 | box-shadow: none; 26 | } 27 | .ui.segment.bodyleft{ 28 | width: 700px; 29 | 30 | } 31 | .ui.basic.segment.articleimg{ 32 | width: 700px; 33 | height: 384px; 34 | padding-top: 216px; 35 | padding-right: 29px; 36 | padding-left: 29px; 37 | } 38 | .ui.basic.segment.articleimg > hr{ 39 | border : 1px dashed white; 40 | } 41 | .image-text{ 42 | color: white; 43 | font-size: 40px; 44 | line-height: 1.3; 45 | } 46 | .ui.basic.segment.articleimg > span{ 47 | color: rgb(236, 236, 236); 48 | font-size: 20px; 49 | position: absolute; 50 | bottom: 17px; 51 | right: 29px; 52 | } 53 | .ui.center.aligned.basic.segment.abstract{ 54 | width: 200px; 55 | margin: 0 auto; 56 | color: #9b9b9b; 57 | font-size: 16px; 58 | font-weight: normal; 59 | line-height: 3; 60 | } 61 | .column > .ui.basic.segment{ 62 | height: 200px; 63 | } 64 | .ui.basic.segment.comment{ 65 | margin-top: 50px; 66 | border-top: 2px solid red; 67 | } 68 | .comment{ 69 | position: relative; 70 | margin-top: 60px; 71 | } 72 | .time{ 73 | color: #9b9b9b; 74 | position: relative; 75 | top:-15px; 76 | } 77 | .black-reply{ 78 | position: absolute; 79 | bottom:0; 80 | left: 52px; 81 | } 82 | .red-reply{ 83 | color: red; 84 | position: absolute; 85 | bottom: -35px; 86 | left:62px; 87 | } 88 | .ui.segment.bodyright{ 89 | width: 100px; 90 | } 91 | .ui.red.segment.best{ 92 | border-left:none; 93 | border-right:none; 94 | border-bottom:none; 95 | box-shadow:none; 96 | border-radius: 0; 97 | padding-left: 0; 98 | padding-right: 0; 99 | } 100 | .ui.segment.top3{ 101 | height: 120px; 102 | padding-top: 0; 103 | position: relative; 104 | border: none; 105 | box-shadow: none; 106 | } 107 | .sidebutton > p{ 108 | position: absolute; 109 | top:0; 110 | left:20px; 111 | color:white; 112 | } 113 | .ui.segment.bestlast{ 114 | border-radius: 0; 115 | height: 60px; 116 | padding-top: 0; 117 | border: none; 118 | box-shadow: none; 119 | } 120 | .ui.segment.bestlast > img{ 121 | position: absolute; 122 | top:4px; 123 | left:0; 124 | } 125 | .ui.segment.bestlast > p{ 126 | font-size: 12px; 127 | } 128 | .ui.segment.bestlast > span{ 129 | font-size: 12px; 130 | color: rgb(206, 208, 204); 131 | position: absolute; 132 | bottom: 0; 133 | } 134 | .ui.basic.segment.bottomblack{ 135 | height: 400px; 136 | background-color: rgb(50,50,50); 137 | padding-left: 250px; 138 | padding-top: 100px; 139 | margin-top: 100px; 140 | } 141 | .ui.circular.red.button.backtotop{ 142 | height: 60px; 143 | position: absolute; 144 | transform: translate(-50%,-50%); 145 | left: 50%; 146 | bottom:-15%; 147 | } 148 | .ui.basic.segment.wechat{ 149 | position: absolute; 150 | top:80px; 151 | right: 250px; 152 | margin-top: 0; 153 | } 154 | .ui.basic.segment.bottomwhite{ 155 | padding-left: 250px; 156 | border-bottom: 2px solid red; 157 | } 158 | .ui.basic.segment.bottomwhite > p{ 159 | font-size: 20px; 160 | } 161 | -------------------------------------------------------------------------------- /static/css/index.css: -------------------------------------------------------------------------------- 1 | a{color: black} 2 | .ui.red.basic.segment.topmenu{ 3 | height: 100px; 4 | padding-left:140px; 5 | padding-right: 140px; 6 | border-bottom: 1px solid rgb(189, 189, 189); 7 | } 8 | .ui.borderless.menu.container > .item > a{ 9 | color: black; 10 | font-weight: bold; 11 | } 12 | .ui.horizontal.basic.segments{ 13 | box-shadow: none; 14 | } 15 | .ui.basic.segment.topleft{ 16 | height:380px; 17 | width: 655px; 18 | border:none; 19 | padding-left: 35px; 20 | padding-top: 20px; 21 | } 22 | .ui.basic.segment.title{ 23 | background: rgba(110, 110, 110,0.7); 24 | position: absolute; 25 | width: 100%; 26 | height: 70px; 27 | left:0; 28 | bottom: 0; 29 | } 30 | .ui.basic.segment.topright{ 31 | height:380px; 32 | padding:0; 33 | border:none; 34 | } 35 | .ui.basic.segment.topright > .ui.segment{ 36 | height: 118px; 37 | border-radius: 0; 38 | margin-left: 15px; 39 | padding-top: 30px; 40 | padding-left: 50px; 41 | } 42 | .four.wide.column > .ui.basic.segment{ 43 | height: 150px; 44 | } 45 | .ui.horizontal.basic.segments.bottomcontent{ 46 | padding-top: 20px; 47 | border-radius: 0; 48 | border-right: none; 49 | border-left: none; 50 | border-bottom: none; 51 | } 52 | .ui.segment.bottomleft{ 53 | width: 700px; 54 | 55 | } 56 | .ui.segment.bottomright{ 57 | width: 100px; 58 | } 59 | .ui.segment.article{ 60 | padding: 0; 61 | border-radius: 0; 62 | height: 200px; 63 | width: 820px; 64 | } 65 | .ui.segment.article > .ui.image{ 66 | float: left; 67 | margin: 0; 68 | } 69 | .ui.segment.articlecontent{ 70 | position: relative; 71 | margin: 0; 72 | padding: 0; 73 | width: 400px; 74 | height: 200px; 75 | float: right; 76 | padding-left: 10px; 77 | } 78 | .ui.segment.articlecontent > p{ 79 | color:rgb(206, 208, 204) 80 | } 81 | .ui.segment.article > .ui.image >img{ 82 | height: 200px; 83 | width:400px; 84 | } 85 | .ui.red.segment.best{ 86 | border-left:none; 87 | border-right:none; 88 | border-bottom:none; 89 | box-shadow:none; 90 | border-radius: 0; 91 | padding-left: 0; 92 | padding-right: 0; 93 | } 94 | .ui.segment.top3{ 95 | height: 120px; 96 | padding-top: 0; 97 | position: relative; 98 | border: none; 99 | box-shadow: none; 100 | } 101 | .sidebutton > p{ 102 | position: absolute; 103 | top:0; 104 | left:20px; 105 | color:white; 106 | } 107 | .ui.segment.bestlast{ 108 | border-radius: 0; 109 | height: 60px; 110 | padding-top: 0; 111 | border: none; 112 | box-shadow: none; 113 | } 114 | .ui.segment.bestlast > img{ 115 | position: absolute; 116 | top:4px; 117 | left:0; 118 | } 119 | .ui.segment.bestlast > p{ 120 | font-size: 12px; 121 | } 122 | .ui.segment.bestlast > span{ 123 | font-size: 12px; 124 | color: rgb(206, 208, 204); 125 | position: absolute; 126 | bottom: 0; 127 | } 128 | .ui.basic.segment.bottomblack{ 129 | height: 400px; 130 | background-color: rgb(50,50,50); 131 | padding-left: 250px; 132 | padding-top: 100px; 133 | } 134 | .ui.circular.red.button.backtotop{ 135 | height: 60px; 136 | position: absolute; 137 | transform: translate(-50%,-50%); 138 | left: 50%; 139 | bottom:-15%; 140 | } 141 | .ui.basic.segment.wechat{ 142 | position: absolute; 143 | top:80px; 144 | right: 250px; 145 | margin-top: 0; 146 | } 147 | .ui.basic.segment.bottomwhite{ 148 | padding-left: 250px; 149 | border-bottom: 2px solid red; 150 | } 151 | .ui.basic.segment.bottomwhite > p{ 152 | font-size: 20px; 153 | } 154 | -------------------------------------------------------------------------------- /static/css/login.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background-image:url(../images/login/backgroundimg.png); 3 | background-size: cover; 4 | background-repeat: no-repeat; 5 | } 6 | .ui.basic.segment.container.content{ 7 | width: 425px; 8 | 9 | margin-left: 50%; 10 | margin-top: 389px; 11 | } 12 | .ui.header{ 13 | color:red; 14 | font-size: 50px !important; 15 | height: 75px; 16 | } 17 | input{ 18 | border-radius: 31.5px!important; 19 | height: 31px!important; 20 | background-color: #ffffff!important; 21 | border: solid 1px #ededed!important; 22 | } 23 | .field{ 24 | position: relative; 25 | } 26 | .two.fields > .field{ 27 | position: relative; 28 | } 29 | .ui.image.top{ 30 | position: absolute; 31 | left: -20px; 32 | top:10px; 33 | } 34 | .ui.image.bottom{ 35 | width: 10px; 36 | height: 10px; 37 | position: absolute; 38 | left: -20px; 39 | margin: 0; 40 | } 41 | label{ 42 | font-size: 12px!important; 43 | color: #9b9b9b !important; 44 | } 45 | .ui.right.floated.red.circular.button{ 46 | width: 102px; 47 | height: 31px; 48 | background-color: #f30c28; 49 | margin-top: 6px; 50 | margin-right: 5px; 51 | font-size: 16px!important; 52 | font-weight: bold; 53 | padding-top: 7px; 54 | } 55 | .ui.basic.segment.container.footer{ 56 | position: relative; 57 | margin-top: 150px; 58 | } 59 | .ui.circular.red.button.backtoindex{ 60 | width: 31px!important; 61 | height: 62px; 62 | border-radius: 15.5px; 63 | background-color: #f30c28; 64 | position: absolute; 65 | transform: translate(-50%,-50%); 66 | left: 50%; 67 | top:30px; 68 | padding: 0; 69 | } 70 | img{ 71 | margin-left: 2px; 72 | } 73 | h4{ 74 | font-size: 12px!important; 75 | color: #ffffff; 76 | margin-left: 2px; 77 | } 78 | .ui.image.title{ 79 | position: relative; 80 | transform: translate(-50%); 81 | left: 50%; 82 | top:45px; 83 | } 84 | -------------------------------------------------------------------------------- /static/css/profile.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background-image:url(../images/login/backgroundimg.png); 3 | background-size: cover; 4 | background-repeat: no-repeat; 5 | } 6 | .ui.basic.segment.container.content{ 7 | width: 425px; 8 | 9 | margin-left: 50%; 10 | margin-top: 389px; 11 | } 12 | 13 | .ui.header{ 14 | color:red; 15 | font-size: 50px !important; 16 | height: 75px; 17 | } 18 | input{ 19 | border-radius: 31.5px!important; 20 | height: 31px!important; 21 | background-color: #ffffff!important; 22 | border: solid 1px #ededed!important; 23 | } 24 | .field{ 25 | position: relative; 26 | } 27 | .ui.image.top{ 28 | position: absolute; 29 | left: -20px; 30 | top:10px; 31 | } 32 | .ui.red.button.register{ 33 | border-radius: 32px; 34 | height: 30px; 35 | width: 400px; 36 | padding-top: 8px; 37 | } 38 | .ui.basic.segment.container.footer{ 39 | position: relative; 40 | margin-top: 150px; 41 | } 42 | .ui.circular.red.button.backtoindex{ 43 | width: 31px!important; 44 | height: 62px; 45 | border-radius: 15.5px; 46 | background-color: #f30c28; 47 | position: absolute; 48 | transform: translate(-50%,-50%); 49 | left: 50%; 50 | top:30px; 51 | padding: 0; 52 | } 53 | img{ 54 | margin-left: 2px; 55 | } 56 | h4{ 57 | font-size: 12px!important; 58 | color: #ffffff; 59 | margin-left: 2px; 60 | } 61 | .ui.image.title{ 62 | position: relative; 63 | transform: translate(-50%); 64 | left: 50%; 65 | top:45px; 66 | } 67 | -------------------------------------------------------------------------------- /static/css/register.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background-image:url(../images/login/backgroundimg.png); 3 | background-size: cover; 4 | background-repeat: no-repeat; 5 | } 6 | .ui.basic.segment.container.content{ 7 | width: 425px; 8 | 9 | margin-left: 50%; 10 | margin-top: 389px; 11 | } 12 | .ui.header{ 13 | color:red; 14 | font-size: 50px !important; 15 | height: 75px; 16 | } 17 | input{ 18 | border-radius: 31.5px!important; 19 | height: 31px!important; 20 | background-color: #ffffff!important; 21 | border: solid 1px #ededed!important; 22 | } 23 | .field{ 24 | position: relative; 25 | } 26 | .ui.image.top{ 27 | position: absolute; 28 | left: -20px; 29 | top:10px; 30 | } 31 | .ui.red.button.register{ 32 | border-radius: 32px; 33 | height: 30px; 34 | width: 400px; 35 | padding-top: 8px; 36 | } 37 | .ui.basic.segment.container.footer{ 38 | position: relative; 39 | margin-top: 150px; 40 | } 41 | .ui.circular.red.button.backtoindex{ 42 | width: 31px!important; 43 | height: 62px; 44 | border-radius: 15.5px; 45 | background-color: #f30c28; 46 | position: absolute; 47 | transform: translate(-50%,-50%); 48 | left: 50%; 49 | top:30px; 50 | padding: 0; 51 | } 52 | img{ 53 | margin-left: 2px; 54 | } 55 | h4{ 56 | font-size: 12px!important; 57 | color: #ffffff; 58 | margin-left: 2px; 59 | } 60 | .ui.image.title{ 61 | position: relative; 62 | transform: translate(-50%); 63 | left: 50%; 64 | top:45px; 65 | } 66 | -------------------------------------------------------------------------------- /static/css/themes/default/assets/fonts/icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/css/themes/default/assets/fonts/icons.eot -------------------------------------------------------------------------------- /static/css/themes/default/assets/fonts/icons.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/css/themes/default/assets/fonts/icons.otf -------------------------------------------------------------------------------- /static/css/themes/default/assets/fonts/icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/css/themes/default/assets/fonts/icons.ttf -------------------------------------------------------------------------------- /static/css/themes/default/assets/fonts/icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/css/themes/default/assets/fonts/icons.woff -------------------------------------------------------------------------------- /static/css/themes/default/assets/fonts/icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/css/themes/default/assets/fonts/icons.woff2 -------------------------------------------------------------------------------- /static/css/themes/default/assets/images/flags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/css/themes/default/assets/images/flags.png -------------------------------------------------------------------------------- /static/images/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/avatar.png -------------------------------------------------------------------------------- /static/images/detail/TOP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/TOP.png -------------------------------------------------------------------------------- /static/images/detail/Triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/Triangle.png -------------------------------------------------------------------------------- /static/images/detail/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/ad.png -------------------------------------------------------------------------------- /static/images/detail/articleimg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/articleimg1.png -------------------------------------------------------------------------------- /static/images/detail/articleimg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/articleimg2.png -------------------------------------------------------------------------------- /static/images/detail/avatar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/avatar2.png -------------------------------------------------------------------------------- /static/images/detail/avatar_jack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/avatar_jack.png -------------------------------------------------------------------------------- /static/images/detail/avatar_jack2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/avatar_jack2.png -------------------------------------------------------------------------------- /static/images/detail/avatar_matt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/avatar_matt.png -------------------------------------------------------------------------------- /static/images/detail/avatar_yangjing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/avatar_yangjing.png -------------------------------------------------------------------------------- /static/images/detail/cover1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/cover1.png -------------------------------------------------------------------------------- /static/images/detail/cover2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/cover2.png -------------------------------------------------------------------------------- /static/images/detail/dotline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/dotline.png -------------------------------------------------------------------------------- /static/images/detail/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/icon.png -------------------------------------------------------------------------------- /static/images/detail/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/login.png -------------------------------------------------------------------------------- /static/images/detail/qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/qrcode.png -------------------------------------------------------------------------------- /static/images/detail/recommend_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/recommend_img1.png -------------------------------------------------------------------------------- /static/images/detail/recommend_img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/recommend_img2.png -------------------------------------------------------------------------------- /static/images/detail/recommend_img3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/recommend_img3.png -------------------------------------------------------------------------------- /static/images/detail/register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/register.png -------------------------------------------------------------------------------- /static/images/detail/sideimg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/sideimg1.png -------------------------------------------------------------------------------- /static/images/detail/sideimg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/sideimg2.png -------------------------------------------------------------------------------- /static/images/detail/sideimg3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/sideimg3.png -------------------------------------------------------------------------------- /static/images/detail/upicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/upicon.png -------------------------------------------------------------------------------- /static/images/detail/zhiribao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/detail/zhiribao.png -------------------------------------------------------------------------------- /static/images/index/TOP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/TOP.png -------------------------------------------------------------------------------- /static/images/index/Triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/Triangle.png -------------------------------------------------------------------------------- /static/images/index/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/ad.png -------------------------------------------------------------------------------- /static/images/index/articleimg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/articleimg1.png -------------------------------------------------------------------------------- /static/images/index/articleimg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/articleimg2.png -------------------------------------------------------------------------------- /static/images/index/articleimg3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/articleimg3.png -------------------------------------------------------------------------------- /static/images/index/articleimg4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/articleimg4.png -------------------------------------------------------------------------------- /static/images/index/articleimg5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/articleimg5.png -------------------------------------------------------------------------------- /static/images/index/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/avatar.png -------------------------------------------------------------------------------- /static/images/index/bluetag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/bluetag.png -------------------------------------------------------------------------------- /static/images/index/coverimg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/coverimg.png -------------------------------------------------------------------------------- /static/images/index/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/icon.png -------------------------------------------------------------------------------- /static/images/index/img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/img1.png -------------------------------------------------------------------------------- /static/images/index/img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/img2.png -------------------------------------------------------------------------------- /static/images/index/img3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/img3.png -------------------------------------------------------------------------------- /static/images/index/img4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/img4.png -------------------------------------------------------------------------------- /static/images/index/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/login.png -------------------------------------------------------------------------------- /static/images/index/qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/qrcode.png -------------------------------------------------------------------------------- /static/images/index/redtag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/redtag.png -------------------------------------------------------------------------------- /static/images/index/register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/register.png -------------------------------------------------------------------------------- /static/images/index/sideimg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/sideimg1.png -------------------------------------------------------------------------------- /static/images/index/sideimg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/sideimg2.png -------------------------------------------------------------------------------- /static/images/index/sideimg3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/sideimg3.png -------------------------------------------------------------------------------- /static/images/index/upicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/upicon.png -------------------------------------------------------------------------------- /static/images/index/white_zhiribao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/white_zhiribao.png -------------------------------------------------------------------------------- /static/images/index/yellowtag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/yellowtag.png -------------------------------------------------------------------------------- /static/images/index/zhiribao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/index/zhiribao.png -------------------------------------------------------------------------------- /static/images/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/login.png -------------------------------------------------------------------------------- /static/images/login/UnCheckedbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/login/UnCheckedbox.png -------------------------------------------------------------------------------- /static/images/login/backgroundimg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/login/backgroundimg.png -------------------------------------------------------------------------------- /static/images/login/checkboxicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/login/checkboxicon.png -------------------------------------------------------------------------------- /static/images/login/homeicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/login/homeicon.png -------------------------------------------------------------------------------- /static/images/login/lockicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/login/lockicon.png -------------------------------------------------------------------------------- /static/images/login/passwordicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/login/passwordicon.png -------------------------------------------------------------------------------- /static/images/login/usericon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/login/usericon.png -------------------------------------------------------------------------------- /static/images/login/zhiribao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/login/zhiribao.png -------------------------------------------------------------------------------- /static/images/profile/fav1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/profile/fav1.png -------------------------------------------------------------------------------- /static/images/profile/fav2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/profile/fav2.png -------------------------------------------------------------------------------- /static/images/profile/fav3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/profile/fav3.png -------------------------------------------------------------------------------- /static/images/profile/fav4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/profile/fav4.png -------------------------------------------------------------------------------- /static/images/profile/fav5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/profile/fav5.png -------------------------------------------------------------------------------- /static/images/profile/homeicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/profile/homeicon.png -------------------------------------------------------------------------------- /static/images/profile/lockicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/profile/lockicon.png -------------------------------------------------------------------------------- /static/images/profile/usericon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/profile/usericon.png -------------------------------------------------------------------------------- /static/images/profile/zhiribao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/profile/zhiribao.png -------------------------------------------------------------------------------- /static/images/register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/static/images/register.png -------------------------------------------------------------------------------- /static/js/reqwest.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Reqwest! A general purpose XHR connection manager 3 | * license MIT (c) Dustin Diaz 2015 4 | * https://github.com/ded/reqwest 5 | */ 6 | 7 | !function (name, context, definition) { 8 | if (typeof module != 'undefined' && module.exports) module.exports = definition() 9 | else if (typeof define == 'function' && define.amd) define(definition) 10 | else context[name] = definition() 11 | }('reqwest', this, function () { 12 | 13 | var context = this 14 | 15 | if ('window' in context) { 16 | var doc = document 17 | , byTag = 'getElementsByTagName' 18 | , head = doc[byTag]('head')[0] 19 | } else { 20 | var XHR2 21 | try { 22 | XHR2 = require('xhr2') 23 | } catch (ex) { 24 | throw new Error('Peer dependency `xhr2` required! Please npm install xhr2') 25 | } 26 | } 27 | 28 | 29 | var httpsRe = /^http/ 30 | , protocolRe = /(^\w+):\/\// 31 | , twoHundo = /^(20\d|1223)$/ //http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request 32 | , readyState = 'readyState' 33 | , contentType = 'Content-Type' 34 | , requestedWith = 'X-Requested-With' 35 | , uniqid = 0 36 | , callbackPrefix = 'reqwest_' + (+new Date()) 37 | , lastValue // data stored by the most recent JSONP callback 38 | , xmlHttpRequest = 'XMLHttpRequest' 39 | , xDomainRequest = 'XDomainRequest' 40 | , noop = function () {} 41 | 42 | , isArray = typeof Array.isArray == 'function' 43 | ? Array.isArray 44 | : function (a) { 45 | return a instanceof Array 46 | } 47 | 48 | , defaultHeaders = { 49 | 'contentType': 'application/x-www-form-urlencoded' 50 | , 'requestedWith': xmlHttpRequest 51 | , 'accept': { 52 | '*': 'text/javascript, text/html, application/xml, text/xml, */*' 53 | , 'xml': 'application/xml, text/xml' 54 | , 'html': 'text/html' 55 | , 'text': 'text/plain' 56 | , 'json': 'application/json, text/javascript' 57 | , 'js': 'application/javascript, text/javascript' 58 | } 59 | } 60 | 61 | , xhr = function(o) { 62 | // is it x-domain 63 | if (o['crossOrigin'] === true) { 64 | var xhr = context[xmlHttpRequest] ? new XMLHttpRequest() : null 65 | if (xhr && 'withCredentials' in xhr) { 66 | return xhr 67 | } else if (context[xDomainRequest]) { 68 | return new XDomainRequest() 69 | } else { 70 | throw new Error('Browser does not support cross-origin requests') 71 | } 72 | } else if (context[xmlHttpRequest]) { 73 | return new XMLHttpRequest() 74 | } else if (XHR2) { 75 | return new XHR2() 76 | } else { 77 | return new ActiveXObject('Microsoft.XMLHTTP') 78 | } 79 | } 80 | , globalSetupOptions = { 81 | dataFilter: function (data) { 82 | return data 83 | } 84 | } 85 | 86 | function succeed(r) { 87 | var protocol = protocolRe.exec(r.url) 88 | protocol = (protocol && protocol[1]) || context.location.protocol 89 | return httpsRe.test(protocol) ? twoHundo.test(r.request.status) : !!r.request.response 90 | } 91 | 92 | function handleReadyState(r, success, error) { 93 | return function () { 94 | // use _aborted to mitigate against IE err c00c023f 95 | // (can't read props on aborted request objects) 96 | if (r._aborted) return error(r.request) 97 | if (r._timedOut) return error(r.request, 'Request is aborted: timeout') 98 | if (r.request && r.request[readyState] == 4) { 99 | r.request.onreadystatechange = noop 100 | if (succeed(r)) success(r.request) 101 | else 102 | error(r.request) 103 | } 104 | } 105 | } 106 | 107 | function setHeaders(http, o) { 108 | var headers = o['headers'] || {} 109 | , h 110 | 111 | headers['Accept'] = headers['Accept'] 112 | || defaultHeaders['accept'][o['type']] 113 | || defaultHeaders['accept']['*'] 114 | 115 | var isAFormData = typeof FormData !== 'undefined' && (o['data'] instanceof FormData); 116 | // breaks cross-origin requests with legacy browsers 117 | if (!o['crossOrigin'] && !headers[requestedWith]) headers[requestedWith] = defaultHeaders['requestedWith'] 118 | if (!headers[contentType] && !isAFormData) headers[contentType] = o['contentType'] || defaultHeaders['contentType'] 119 | for (h in headers) 120 | headers.hasOwnProperty(h) && 'setRequestHeader' in http && http.setRequestHeader(h, headers[h]) 121 | } 122 | 123 | function setCredentials(http, o) { 124 | if (typeof o['withCredentials'] !== 'undefined' && typeof http.withCredentials !== 'undefined') { 125 | http.withCredentials = !!o['withCredentials'] 126 | } 127 | } 128 | 129 | function generalCallback(data) { 130 | lastValue = data 131 | } 132 | 133 | function urlappend (url, s) { 134 | return url + (/\?/.test(url) ? '&' : '?') + s 135 | } 136 | 137 | function handleJsonp(o, fn, err, url) { 138 | var reqId = uniqid++ 139 | , cbkey = o['jsonpCallback'] || 'callback' // the 'callback' key 140 | , cbval = o['jsonpCallbackName'] || reqwest.getcallbackPrefix(reqId) 141 | , cbreg = new RegExp('((^|\\?|&)' + cbkey + ')=([^&]+)') 142 | , match = url.match(cbreg) 143 | , script = doc.createElement('script') 144 | , loaded = 0 145 | , isIE10 = navigator.userAgent.indexOf('MSIE 10.0') !== -1 146 | 147 | if (match) { 148 | if (match[3] === '?') { 149 | url = url.replace(cbreg, '$1=' + cbval) // wildcard callback func name 150 | } else { 151 | cbval = match[3] // provided callback func name 152 | } 153 | } else { 154 | url = urlappend(url, cbkey + '=' + cbval) // no callback details, add 'em 155 | } 156 | 157 | context[cbval] = generalCallback 158 | 159 | script.type = 'text/javascript' 160 | script.src = url 161 | script.async = true 162 | if (typeof script.onreadystatechange !== 'undefined' && !isIE10) { 163 | // need this for IE due to out-of-order onreadystatechange(), binding script 164 | // execution to an event listener gives us control over when the script 165 | // is executed. See http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html 166 | script.htmlFor = script.id = '_reqwest_' + reqId 167 | } 168 | 169 | script.onload = script.onreadystatechange = function () { 170 | if ((script[readyState] && script[readyState] !== 'complete' && script[readyState] !== 'loaded') || loaded) { 171 | return false 172 | } 173 | script.onload = script.onreadystatechange = null 174 | script.onclick && script.onclick() 175 | // Call the user callback with the last value stored and clean up values and scripts. 176 | fn(lastValue) 177 | lastValue = undefined 178 | head.removeChild(script) 179 | loaded = 1 180 | } 181 | 182 | // Add the script to the DOM head 183 | head.appendChild(script) 184 | 185 | // Enable JSONP timeout 186 | return { 187 | abort: function () { 188 | script.onload = script.onreadystatechange = null 189 | err({}, 'Request is aborted: timeout', {}) 190 | lastValue = undefined 191 | head.removeChild(script) 192 | loaded = 1 193 | } 194 | } 195 | } 196 | 197 | function getRequest(fn, err) { 198 | var o = this.o 199 | , method = (o['method'] || 'GET').toUpperCase() 200 | , url = typeof o === 'string' ? o : o['url'] 201 | // convert non-string objects to query-string form unless o['processData'] is false 202 | , data = (o['processData'] !== false && o['data'] && typeof o['data'] !== 'string') 203 | ? reqwest.toQueryString(o['data']) 204 | : (o['data'] || null) 205 | , http 206 | , sendWait = false 207 | 208 | // if we're working on a GET request and we have data then we should append 209 | // query string to end of URL and not post data 210 | if ((o['type'] == 'jsonp' || method == 'GET') && data) { 211 | url = urlappend(url, data) 212 | data = null 213 | } 214 | 215 | if (o['type'] == 'jsonp') return handleJsonp(o, fn, err, url) 216 | 217 | // get the xhr from the factory if passed 218 | // if the factory returns null, fall-back to ours 219 | http = (o.xhr && o.xhr(o)) || xhr(o) 220 | 221 | http.open(method, url, o['async'] === false ? false : true) 222 | setHeaders(http, o) 223 | setCredentials(http, o) 224 | if (context[xDomainRequest] && http instanceof context[xDomainRequest]) { 225 | http.onload = fn 226 | http.onerror = err 227 | // NOTE: see 228 | // http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/30ef3add-767c-4436-b8a9-f1ca19b4812e 229 | http.onprogress = function() {} 230 | sendWait = true 231 | } else { 232 | http.onreadystatechange = handleReadyState(this, fn, err) 233 | } 234 | o['before'] && o['before'](http) 235 | if (sendWait) { 236 | setTimeout(function () { 237 | http.send(data) 238 | }, 200) 239 | } else { 240 | http.send(data) 241 | } 242 | return http 243 | } 244 | 245 | function Reqwest(o, fn) { 246 | this.o = o 247 | this.fn = fn 248 | 249 | init.apply(this, arguments) 250 | } 251 | 252 | function setType(header) { 253 | // json, javascript, text/plain, text/html, xml 254 | if (header === null) return undefined; //In case of no content-type. 255 | if (header.match('json')) return 'json' 256 | if (header.match('javascript')) return 'js' 257 | if (header.match('text')) return 'html' 258 | if (header.match('xml')) return 'xml' 259 | } 260 | 261 | function init(o, fn) { 262 | 263 | this.url = typeof o == 'string' ? o : o['url'] 264 | this.timeout = null 265 | 266 | // whether request has been fulfilled for purpose 267 | // of tracking the Promises 268 | this._fulfilled = false 269 | // success handlers 270 | this._successHandler = function(){} 271 | this._fulfillmentHandlers = [] 272 | // error handlers 273 | this._errorHandlers = [] 274 | // complete (both success and fail) handlers 275 | this._completeHandlers = [] 276 | this._erred = false 277 | this._responseArgs = {} 278 | 279 | var self = this 280 | 281 | fn = fn || function () {} 282 | 283 | if (o['timeout']) { 284 | this.timeout = setTimeout(function () { 285 | timedOut() 286 | }, o['timeout']) 287 | } 288 | 289 | if (o['success']) { 290 | this._successHandler = function () { 291 | o['success'].apply(o, arguments) 292 | } 293 | } 294 | 295 | if (o['error']) { 296 | this._errorHandlers.push(function () { 297 | o['error'].apply(o, arguments) 298 | }) 299 | } 300 | 301 | if (o['complete']) { 302 | this._completeHandlers.push(function () { 303 | o['complete'].apply(o, arguments) 304 | }) 305 | } 306 | 307 | function complete (resp) { 308 | o['timeout'] && clearTimeout(self.timeout) 309 | self.timeout = null 310 | while (self._completeHandlers.length > 0) { 311 | self._completeHandlers.shift()(resp) 312 | } 313 | } 314 | 315 | function success (resp) { 316 | var type = o['type'] || resp && setType(resp.getResponseHeader('Content-Type')) // resp can be undefined in IE 317 | resp = (type !== 'jsonp') ? self.request : resp 318 | // use global data filter on response text 319 | var filteredResponse = globalSetupOptions.dataFilter(resp.responseText, type) 320 | , r = filteredResponse 321 | try { 322 | resp.responseText = r 323 | } catch (e) { 324 | // can't assign this in IE<=8, just ignore 325 | } 326 | if (r) { 327 | switch (type) { 328 | case 'json': 329 | try { 330 | resp = context.JSON ? context.JSON.parse(r) : eval('(' + r + ')') 331 | } catch (err) { 332 | return error(resp, 'Could not parse JSON in response', err) 333 | } 334 | break 335 | case 'js': 336 | resp = eval(r) 337 | break 338 | case 'html': 339 | resp = r 340 | break 341 | case 'xml': 342 | resp = resp.responseXML 343 | && resp.responseXML.parseError // IE trololo 344 | && resp.responseXML.parseError.errorCode 345 | && resp.responseXML.parseError.reason 346 | ? null 347 | : resp.responseXML 348 | break 349 | } 350 | } 351 | 352 | self._responseArgs.resp = resp 353 | self._fulfilled = true 354 | fn(resp) 355 | self._successHandler(resp) 356 | while (self._fulfillmentHandlers.length > 0) { 357 | resp = self._fulfillmentHandlers.shift()(resp) 358 | } 359 | 360 | complete(resp) 361 | } 362 | 363 | function timedOut() { 364 | self._timedOut = true 365 | self.request.abort() 366 | } 367 | 368 | function error(resp, msg, t) { 369 | resp = self.request 370 | self._responseArgs.resp = resp 371 | self._responseArgs.msg = msg 372 | self._responseArgs.t = t 373 | self._erred = true 374 | while (self._errorHandlers.length > 0) { 375 | self._errorHandlers.shift()(resp, msg, t) 376 | } 377 | complete(resp) 378 | } 379 | 380 | this.request = getRequest.call(this, success, error) 381 | } 382 | 383 | Reqwest.prototype = { 384 | abort: function () { 385 | this._aborted = true 386 | this.request.abort() 387 | } 388 | 389 | , retry: function () { 390 | init.call(this, this.o, this.fn) 391 | } 392 | 393 | /** 394 | * Small deviation from the Promises A CommonJs specification 395 | * http://wiki.commonjs.org/wiki/Promises/A 396 | */ 397 | 398 | /** 399 | * `then` will execute upon successful requests 400 | */ 401 | , then: function (success, fail) { 402 | success = success || function () {} 403 | fail = fail || function () {} 404 | if (this._fulfilled) { 405 | this._responseArgs.resp = success(this._responseArgs.resp) 406 | } else if (this._erred) { 407 | fail(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t) 408 | } else { 409 | this._fulfillmentHandlers.push(success) 410 | this._errorHandlers.push(fail) 411 | } 412 | return this 413 | } 414 | 415 | /** 416 | * `always` will execute whether the request succeeds or fails 417 | */ 418 | , always: function (fn) { 419 | if (this._fulfilled || this._erred) { 420 | fn(this._responseArgs.resp) 421 | } else { 422 | this._completeHandlers.push(fn) 423 | } 424 | return this 425 | } 426 | 427 | /** 428 | * `fail` will execute when the request fails 429 | */ 430 | , fail: function (fn) { 431 | if (this._erred) { 432 | fn(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t) 433 | } else { 434 | this._errorHandlers.push(fn) 435 | } 436 | return this 437 | } 438 | , 'catch': function (fn) { 439 | return this.fail(fn) 440 | } 441 | } 442 | 443 | function reqwest(o, fn) { 444 | return new Reqwest(o, fn) 445 | } 446 | 447 | // normalize newline variants according to spec -> CRLF 448 | function normalize(s) { 449 | return s ? s.replace(/\r?\n/g, '\r\n') : '' 450 | } 451 | 452 | function serial(el, cb) { 453 | var n = el.name 454 | , t = el.tagName.toLowerCase() 455 | , optCb = function (o) { 456 | // IE gives value="" even where there is no value attribute 457 | // 'specified' ref: http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-862529273 458 | if (o && !o['disabled']) 459 | cb(n, normalize(o['attributes']['value'] && o['attributes']['value']['specified'] ? o['value'] : o['text'])) 460 | } 461 | , ch, ra, val, i 462 | 463 | // don't serialize elements that are disabled or without a name 464 | if (el.disabled || !n) return 465 | 466 | switch (t) { 467 | case 'input': 468 | if (!/reset|button|image|file/i.test(el.type)) { 469 | ch = /checkbox/i.test(el.type) 470 | ra = /radio/i.test(el.type) 471 | val = el.value 472 | // WebKit gives us "" instead of "on" if a checkbox has no value, so correct it here 473 | ;(!(ch || ra) || el.checked) && cb(n, normalize(ch && val === '' ? 'on' : val)) 474 | } 475 | break 476 | case 'textarea': 477 | cb(n, normalize(el.value)) 478 | break 479 | case 'select': 480 | if (el.type.toLowerCase() === 'select-one') { 481 | optCb(el.selectedIndex >= 0 ? el.options[el.selectedIndex] : null) 482 | } else { 483 | for (i = 0; el.length && i < el.length; i++) { 484 | el.options[i].selected && optCb(el.options[i]) 485 | } 486 | } 487 | break 488 | } 489 | } 490 | 491 | // collect up all form elements found from the passed argument elements all 492 | // the way down to child elements; pass a '
' or form fields. 493 | // called with 'this'=callback to use for serial() on each element 494 | function eachFormElement() { 495 | var cb = this 496 | , e, i 497 | , serializeSubtags = function (e, tags) { 498 | var i, j, fa 499 | for (i = 0; i < tags.length; i++) { 500 | fa = e[byTag](tags[i]) 501 | for (j = 0; j < fa.length; j++) serial(fa[j], cb) 502 | } 503 | } 504 | 505 | for (i = 0; i < arguments.length; i++) { 506 | e = arguments[i] 507 | if (/input|select|textarea/i.test(e.tagName)) serial(e, cb) 508 | serializeSubtags(e, [ 'input', 'select', 'textarea' ]) 509 | } 510 | } 511 | 512 | // standard query string style serialization 513 | function serializeQueryString() { 514 | return reqwest.toQueryString(reqwest.serializeArray.apply(null, arguments)) 515 | } 516 | 517 | // { 'name': 'value', ... } style serialization 518 | function serializeHash() { 519 | var hash = {} 520 | eachFormElement.apply(function (name, value) { 521 | if (name in hash) { 522 | hash[name] && !isArray(hash[name]) && (hash[name] = [hash[name]]) 523 | hash[name].push(value) 524 | } else hash[name] = value 525 | }, arguments) 526 | return hash 527 | } 528 | 529 | // [ { name: 'name', value: 'value' }, ... ] style serialization 530 | reqwest.serializeArray = function () { 531 | var arr = [] 532 | eachFormElement.apply(function (name, value) { 533 | arr.push({name: name, value: value}) 534 | }, arguments) 535 | return arr 536 | } 537 | 538 | reqwest.serialize = function () { 539 | if (arguments.length === 0) return '' 540 | var opt, fn 541 | , args = Array.prototype.slice.call(arguments, 0) 542 | 543 | opt = args.pop() 544 | opt && opt.nodeType && args.push(opt) && (opt = null) 545 | opt && (opt = opt.type) 546 | 547 | if (opt == 'map') fn = serializeHash 548 | else if (opt == 'array') fn = reqwest.serializeArray 549 | else fn = serializeQueryString 550 | 551 | return fn.apply(null, args) 552 | } 553 | 554 | reqwest.toQueryString = function (o, trad) { 555 | var prefix, i 556 | , traditional = trad || false 557 | , s = [] 558 | , enc = encodeURIComponent 559 | , add = function (key, value) { 560 | // If value is a function, invoke it and return its value 561 | value = ('function' === typeof value) ? value() : (value == null ? '' : value) 562 | s[s.length] = enc(key) + '=' + enc(value) 563 | } 564 | // If an array was passed in, assume that it is an array of form elements. 565 | if (isArray(o)) { 566 | for (i = 0; o && i < o.length; i++) add(o[i]['name'], o[i]['value']) 567 | } else { 568 | // If traditional, encode the "old" way (the way 1.3.2 or older 569 | // did it), otherwise encode params recursively. 570 | for (prefix in o) { 571 | if (o.hasOwnProperty(prefix)) buildParams(prefix, o[prefix], traditional, add) 572 | } 573 | } 574 | 575 | // spaces should be + according to spec 576 | return s.join('&').replace(/%20/g, '+') 577 | } 578 | 579 | function buildParams(prefix, obj, traditional, add) { 580 | var name, i, v 581 | , rbracket = /\[\]$/ 582 | 583 | if (isArray(obj)) { 584 | // Serialize array item. 585 | for (i = 0; obj && i < obj.length; i++) { 586 | v = obj[i] 587 | if (traditional || rbracket.test(prefix)) { 588 | // Treat each array item as a scalar. 589 | add(prefix, v) 590 | } else { 591 | buildParams(prefix + '[' + (typeof v === 'object' ? i : '') + ']', v, traditional, add) 592 | } 593 | } 594 | } else if (obj && obj.toString() === '[object Object]') { 595 | // Serialize object item. 596 | for (name in obj) { 597 | buildParams(prefix + '[' + name + ']', obj[name], traditional, add) 598 | } 599 | 600 | } else { 601 | // Serialize scalar item. 602 | add(prefix, obj) 603 | } 604 | } 605 | 606 | reqwest.getcallbackPrefix = function () { 607 | return callbackPrefix 608 | } 609 | 610 | // jQuery and Zepto compatibility, differences can be remapped here so you can call 611 | // .ajax.compat(options, callback) 612 | reqwest.compat = function (o, fn) { 613 | if (o) { 614 | o['type'] && (o['method'] = o['type']) && delete o['type'] 615 | o['dataType'] && (o['type'] = o['dataType']) 616 | o['jsonpCallback'] && (o['jsonpCallbackName'] = o['jsonpCallback']) && delete o['jsonpCallback'] 617 | o['jsonp'] && (o['jsonpCallback'] = o['jsonp']) 618 | } 619 | return new Reqwest(o, fn) 620 | } 621 | 622 | reqwest.ajaxSetup = function (options) { 623 | options = options || {} 624 | for (var k in options) { 625 | globalSetupOptions[k] = options[k] 626 | } 627 | } 628 | 629 | return reqwest 630 | }); 631 | -------------------------------------------------------------------------------- /templates/category.html: -------------------------------------------------------------------------------- 1 | 2 | {% load staticfiles %} 3 | 4 | 5 | 6 | 分类页 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 63 |
64 |
65 |
66 |
67 | {% verbatim %} 68 |
69 |
70 | 71 |
72 |
73 |

{{article.title}}

74 |

75 | {{article.abstract}} 76 |

77 | {{article.publish_time | date:"Y-m-d"}} 78 |
79 |
80 | {% endverbatim %} 81 | 90 |
91 |
92 |
93 |

编辑推荐

94 | {% verbatim %} 95 |
97 |
98 | 99 |

Top{{ $index+1 }}

100 |
101 | 104 |
105 | {% endverbatim %} 106 | 107 | {% verbatim %} 108 |
109 | 110 |

111 | 112 | {{editor_recommend.title}} 113 | 114 |

115 | {{editor_recommend.publish_time | date:"Y-m-d"}} 116 |
117 | {% endverbatim %} 118 |
119 | 120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 | 128 |
129 |

130 | 关于我们加入我们联系我们|寻求报道 131 |

132 |

133 | 反馈建议:124608760@qq.com 134 |

135 |
136 | 137 |

扫码关注微信号

138 |
139 | 143 |
144 |
145 |

146 | Designed by Mugglecoding 147 |

148 |

149 | Developed by XYX 150 |

151 |

152 | 京ICP备123878345号 153 |

154 |
155 | 268 | 269 | 270 | 271 | -------------------------------------------------------------------------------- /templates/detail.html: -------------------------------------------------------------------------------- 1 | 2 | {% load staticfiles %} 3 | 4 | 5 | 6 | 详情页 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 65 |
66 |
67 |
68 |
69 | {% verbatim %} 70 |
72 |
73 |
74 | {{article.title}} 75 |
76 | 图片:Zoommy 77 |
78 |
79 | ***
80 | 81 | {{article.abstract}}
82 | 83 | *** 84 |
85 |
86 |

{{article.title}}

87 |

88 |

89 | 90 |
91 | {{ article.author_name }} 92 | {{ article.author_desc }} 93 |

94 | {{article.content}} 95 |

96 | 查看原文 97 |
98 | {% endverbatim %} 99 |
100 |

评论

101 | {% verbatim %} 102 |
103 |
104 | 105 |
106 |    {{comment.belong_user.username}}   {{comment.created}} 107 |    {{comment.words}} 108 |
109 | {% endverbatim %} 110 | {% verbatim %} 111 | 112 | 113 | 114 | 117 | {% endverbatim %} 118 |
119 | 120 |
121 |
122 |
123 |

编辑推荐

124 | {% for editor_recommendtop3 in editor_recommendtop3list %} 125 | 126 |
128 |
129 | 130 |

Top{{ forloop.counter }}

131 |
132 | 133 | 136 | 137 |
138 | 139 | {% endfor %} 140 | 141 | {% for editor_recommend in editor_recommendlist %} 142 | 143 |
144 | 145 | 146 |

147 | 148 | {{editor_recommend.title}} 149 | 150 |

151 | 152 | {{editor_recommend.publish_time | date:"Y-m-d"}} 153 |
154 | 155 | {% endfor %} 156 |
157 | 158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 | 166 |
167 |

168 | 关于我们加入我们联系我们|寻求报道 169 |

170 |

171 | 反馈建议:124608760@qq.com 172 |

173 |
174 | 175 |

扫码关注微信号

176 |
177 | 181 |
182 |
183 |

184 | Designed by Mugglecoding 185 |

186 |

187 | Developed by XYX 188 |

189 |

190 | 京ICP备123878345号 191 |

192 |
193 | 255 | 256 | 257 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | {% load staticfiles %} 3 | 4 | 5 | 6 | 首页 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 65 |
66 |
67 |
68 |
69 | {% verbatim %} 70 |
71 | 今日热闻 72 | 75 |
76 | {% endverbatim %} 77 | 78 |
79 | {% verbatim %} 80 |
81 | 82 |

83 | {{todaynew.title}} 84 |

85 |
86 | {{todaynew.publish_time | date:"Y-m-d"}} 87 |
88 | {% endverbatim %} 89 |
90 |
91 |
92 | 93 |
94 | {% verbatim %} 95 | 105 | {% endverbatim %} 106 |
107 | 108 |
109 |
110 | {% verbatim %} 111 |
112 |
113 | 114 |
115 |
116 |

{{article.title}}

117 |

118 | {{article.abstract}} 119 |

120 | {{article.publish_time | date:"Y-m-d"}} 121 |
122 |
123 | {% endverbatim %} 124 | 133 |
134 |
135 |
136 |

编辑推荐

137 | 138 | {% verbatim %} 139 |
141 |
142 | 143 |

Top{{ $index+1 }}

144 |
145 | 148 |
149 | {% endverbatim %} 150 | 151 | {% verbatim %} 152 |
153 | 154 |

155 | 156 | {{editor_recommend.title}} 157 | 158 |

159 | {{editor_recommend.publish_time | date:"Y-m-d"}} 160 |
161 | {% endverbatim %} 162 | 163 |
164 | 165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 | 173 |
174 |

175 | 关于我们加入我们联系我们|寻求报道 176 |

177 |

178 | 反馈建议:124608760@qq.com 179 |

180 |
181 | 182 |

扫码关注微信号

183 |
184 | 188 |
189 |
190 |

191 | Designed by Mugglecoding 192 |

193 |

194 | Developed by XYX 195 |

196 |

197 | 京ICP备123878345号 198 |

199 |
200 | 319 | 320 | 321 | -------------------------------------------------------------------------------- /templates/login.html: -------------------------------------------------------------------------------- 1 | 2 | {% load staticfiles %} 3 | 4 | 5 | 6 | 登录页 7 | 8 | 9 | 10 | 11 |
12 |

登录

13 |
14 |
15 |
16 | 17 |
18 | {{form.username}} 19 |
20 |
21 |
22 | 23 |
24 | {{form.password}} 25 |
26 | {% csrf_token %} 27 |
28 |
29 |
30 | 31 |
32 | 33 |
34 | 35 |
36 | 37 |
38 |
39 | 40 |
41 |
42 |
43 |
44 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /templates/profile.html: -------------------------------------------------------------------------------- 1 | 2 | {% load staticfiles %} 3 | 4 | 5 | 6 | 个人资料页 7 | 8 | 9 | 10 | 11 |
12 |

个人资料修改

13 |
14 | {% if form.errors %} 15 |
16 | {{ form.errors }} 17 |
18 | {% endif %} 19 |
20 | {{request.user.username}} 21 |
22 |
23 |
24 | 25 |
26 | {{form.email}} 27 |
28 |
29 |
30 | 31 |
32 | {{form.password}} 33 |
34 |
35 |
36 | 37 |
38 | {{form.password_confirm}} 39 |
40 | {% csrf_token %} 41 |
42 | 上传头像{{form.avatar}} 43 |
44 | 45 |
46 | 47 |
48 |
49 |
50 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /templates/register.html: -------------------------------------------------------------------------------- 1 | 2 | {% load staticfiles %} 3 | 4 | 5 | 6 | 注册页 7 | 8 | 9 | 10 | 11 |
12 |

注册

13 |
14 | {% if form.errors %} 15 |
16 | {{ form.errors }} 17 |
18 | {% endif %} 19 |
20 |
21 | 22 |
23 | {{form.username}} 24 |
25 |
26 |
27 | 28 |
29 | {{form.email}} 30 |
31 |
32 |
33 | 34 |
35 | {{form.password}} 36 |
37 |
38 |
39 | 40 |
41 | {{form.password_confirm}} 42 |
43 | {% csrf_token %} 44 |
45 | 46 |
47 |
48 |
49 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /upload/article_image/articleimg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/article_image/articleimg1.png -------------------------------------------------------------------------------- /upload/article_image/articleimg1_8nSvPmx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/article_image/articleimg1_8nSvPmx.png -------------------------------------------------------------------------------- /upload/article_image/articleimg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/article_image/articleimg2.png -------------------------------------------------------------------------------- /upload/article_image/articleimg4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/article_image/articleimg4.png -------------------------------------------------------------------------------- /upload/article_image/articleimg4_35AroG4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/article_image/articleimg4_35AroG4.png -------------------------------------------------------------------------------- /upload/article_image/cate_articleimg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/article_image/cate_articleimg2.png -------------------------------------------------------------------------------- /upload/article_image/cover1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/article_image/cover1.png -------------------------------------------------------------------------------- /upload/article_image/coverimg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/article_image/coverimg.png -------------------------------------------------------------------------------- /upload/article_image/sideimg3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/article_image/sideimg3.png -------------------------------------------------------------------------------- /upload/article_image/潜艇5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/article_image/潜艇5.jpg -------------------------------------------------------------------------------- /upload/author_avatar/avatar_jack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/author_avatar/avatar_jack.png -------------------------------------------------------------------------------- /upload/author_avatar/avatar_jack2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/author_avatar/avatar_jack2.png -------------------------------------------------------------------------------- /upload/author_avatar/avatar_jack_4XiOWu9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/author_avatar/avatar_jack_4XiOWu9.png -------------------------------------------------------------------------------- /upload/author_avatar/avatar_jack_Ug5u9lO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/author_avatar/avatar_jack_Ug5u9lO.png -------------------------------------------------------------------------------- /upload/author_avatar/avatar_matt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/author_avatar/avatar_matt.png -------------------------------------------------------------------------------- /upload/author_avatar/avatar_matt_X3qlYj3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/author_avatar/avatar_matt_X3qlYj3.png -------------------------------------------------------------------------------- /upload/author_avatar/avatar_matt_lMwRSw2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/author_avatar/avatar_matt_lMwRSw2.png -------------------------------------------------------------------------------- /upload/author_avatar/avatar_matt_sRAJhT7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/author_avatar/avatar_matt_sRAJhT7.png -------------------------------------------------------------------------------- /upload/author_avatar/avatar_yangjing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/author_avatar/avatar_yangjing.png -------------------------------------------------------------------------------- /upload/author_avatar/fav5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/author_avatar/fav5.png -------------------------------------------------------------------------------- /upload/avatar/CSS定位练习1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/CSS定位练习1.jpg -------------------------------------------------------------------------------- /upload/avatar/CSS定位练习1_WUQSOGr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/CSS定位练习1_WUQSOGr.jpg -------------------------------------------------------------------------------- /upload/avatar/CSS定位练习1_qQOp3PZ.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/CSS定位练习1_qQOp3PZ.jpg -------------------------------------------------------------------------------- /upload/avatar/CSS练习.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/CSS练习.jpg -------------------------------------------------------------------------------- /upload/avatar/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/avatar.png -------------------------------------------------------------------------------- /upload/avatar/css定位练习2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/css定位练习2.jpg -------------------------------------------------------------------------------- /upload/avatar/css定位练习2_9hNVaAw.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/css定位练习2_9hNVaAw.jpg -------------------------------------------------------------------------------- /upload/avatar/django安装.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/django安装.jpg -------------------------------------------------------------------------------- /upload/avatar/landing_page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/landing_page.jpg -------------------------------------------------------------------------------- /upload/avatar/landing_page_6RuDiGQ.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/landing_page_6RuDiGQ.jpg -------------------------------------------------------------------------------- /upload/avatar/landing_page_OUJmmQF.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/landing_page_OUJmmQF.jpg -------------------------------------------------------------------------------- /upload/avatar/landing_page_ZJLH3cz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/landing_page_ZJLH3cz.jpg -------------------------------------------------------------------------------- /upload/avatar/谢源祥照片.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/124608760/newswebsite--django-vue.js-reqwest-restful-api/f2730fb92e477c96479907a1e909be25cab3f5bd/upload/avatar/谢源祥照片.JPG --------------------------------------------------------------------------------