Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÕûºÏ Django + Vue.js ¿ò¼Ü¿ìËٴwebÏîÄ¿
 
  3200  次浏览      27
  2018-12-3
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ôtencent£¬ÎÄÕÂÖ÷Òª½éÉÜÈçºÎʹÓúó¶ËDjango + ǰ¶ËVue.jsµÄ¼¼ÊõÕ»¿ìËٵشÆðÒ»Ì×webÏîÄ¿µÄ¿ò¼Ü¡£

Ò»¡¢ ±³¾°

ÔÚ¹¤×÷ÖÐÎÒÃǾ­³£ÐëÒª¹¹¼þһЩ»ùÓÚwebµÄÏîÄ¿£¬ÀýÈçÄÚ²¿²âÊÔÆ½Ì¨¡¢ÔËάϵͳµÈ¡£±¾ÆªÖ÷Òª½éÉÜÈçºÎʹÓúó¶ËDjango + ǰ¶ËVue.jsµÄ¼¼ÊõÕ»¿ìËٵشÆðÒ»Ì×webÏîÄ¿µÄ¿ò¼Ü¡£

ΪʲôʹÓÃDjangoºÍVue.js?

DjangoÊÇPythonÌåϵÏÂ×î³ÉÊìµÄweb¿ò¼ÜÖ®Ò»£¬ÓÉÓÚPythonÓïÑÔµÄÒ×ÓÃÐÔºÍÊÜÖÚÃæ¹ã£¬Django¿ò¼ÜÒ²ÒòÆäÄܹ»¿ìËÙ¿ª·¢ÍøÕ¾Ó¦ÓõÄÌØÐÔ³ÉΪÁËÖÐСÐÍÍøÕ¾¿ª·¢¿ò¼ÜÊ×Ñ¡¡£ÇÒDjango¾ß±¸µÄÊý¾Ý·ÖÎö( Pandas )¡¢ÈÎÎñ¶ÓÁÐ( Celery )¡¢Restful API( Django REST framework )¡¢ORM(ÀàËÆjavaµÄhibernate)µÈÒ»ÖÚ¹¦Äܶ¼Ê¹µÃÓû§ÔÚÃæ¶ÔÈκν¨Õ¾ÐèÇóʱ¶¼Äܹ»µÃÐÄÓ¦ÊÖ¡£

Vue.jsÊǵ±ÏºܻðµÄÒ»¸öJavaScript MVVM¿â£¬ËüÊÇÒÔÊý¾ÝÇý¶¯ºÍ×é¼þ»¯µÄ˼Ïë¹¹½¨µÄ¡£Ïà±ÈÓÚAngular.js£¬Vue.jsͬÑùÖ§³ÖË«Ïò°ó¶¨¡¢mustache±êÇ©Óï·¨µÈÌØÐÔ£¬²¢ÌṩÁ˸ü¼Ó¼ò½à¡¢¸üÒ×ÓÚÀí½âµÄAPI£¬Ê¹µÃÎÒÃÇÄܹ»¿ìËÙµØÉÏÊÖ²¢Ê¹ÓÃVue.js¡£

±¾ÆªÊ¹ÓÃVue.js×÷Ϊǰ¶Ë¿ò¼Ü£¬´úÌæDjango±¾Éí½ÏΪåîÈõµÄÄ£°åÒýÇæ£¬DjangoÔò×÷Ϊ·þÎñ¶ËÌṩapi½Ó¿Ú£¬Ê¹µÃǰºó¶ËʵÏÖÍêÈ«·ÖÀ룬¸üÊʺϵ¥Ò³Ó¦ÓõĿª·¢¹¹½¨¡£

¶þ¡¢ »·¾³×¼±¸

°²×°»·¾³£º

Djangoϵ£º

Python 2.7 +

Django 1.11

Mysql 5.7

PythonµÄMySQLdbÄ£¿éµÈ

ÍÆ¼öpythonÏà¹ØµÄÄ£¿é£¨°üÀ¨Django£©¶¼Ê¹ÓÃpython×Ô´øµÄpip°²×°Æ÷°²×°¡£ÃüÁpip install django¼´¿É°²×°×îа汾µÄdjango

Vue.jsϵ£º

Node.js 6.1

ÓйØVueµÄÄ£¿é(°üÀ¨vue)ÎÒÃǶ¼Ê¹ÓÃnode×Ô´øµÄnpm°ü¹ÜÀíÆ÷°²×°

Èý¡¢ ¹¹½¨DjangoÏîÄ¿

ÎÒÃÇÊ×ÏÈʹÓÃDjangoÀ´´î½¨webºó¶Ëapi¿ò¼Ü¡£

1¡¢ ÏÈÔÚÖÕ¶ËÇÃÈëÃüÁ

django-admin startproject myproject

Ŀ¼½á¹¹£º

2¡¢ ½øÈëÏîÄ¿¸ùĿ¼£¬´´½¨Ò»¸öapp£º

python manage.py startapp myapp

Ŀ¼½á¹¹£º

3¡¢ ÔÚmyprojectϵÄsettings.pyÅäÖÃÎļþÖУ¬°ÑĬÈϵÄsqllite3Êý¾Ý¿â»»³ÉÎÒÃǵÄmysqlÊý¾Ý¿â£º

# Database
# https://docs.djangoproject.com/en/1.11/ref
/settings/#databases

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myproject',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
}
}

²¢°Ñapp¼ÓÈëµ½installed_appsÁбíÀ

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]

4¡¢ ÔÚappĿ¼ÏµÄmodels.pyÀïÎÒÃǼòµ¥Ð´Ò»¸ömodelÈçÏ£º

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Book(models.Model):
book_name = models.CharField(max_length=64)
add_time = models.DateTimeField(auto_now_add=True)

def __unicode__(self):
return self.book_name

Ö»ÓÐÁ½¸ö×ֶΣ¬ÊéÃûbook_nameºÍÌí¼Óʱ¼äadd_time¡£Èç¹ûûÓÐÖ¸¶¨Ö÷¼üµÄ»°django»á×Ô¶¯ÐÂÔöÒ»¸ö×ÔÔöid×÷ΪÖ÷¼ü

5¡¢ ÔÚappĿ¼ÏµÄviewsÀïÎÒÃÇÐÂÔöÁ½¸ö½Ó¿Ú£¬Ò»¸öÊÇshow_books·µ»ØËùÓеÄÊé¼®ÁÐ±í£¨Í¨¹ýJsonResponse·µ»ØÄܱ»Ç°¶Ëʶ±ðµÄjson¸ñʽÊý¾Ý£©£¬¶þÊÇadd_book½ÓÊÜÒ»¸ögetÇëÇó£¬ÍùÊý¾Ý¿âÀïÌí¼ÓÒ»ÌõbookÊý¾Ý£º

# Create your views here.
@require_http_methods(["GET"])
def add_book(request):
response = {}
try:
book = Book(book_name=request.GET.get('book_name'))
book.save()
response['msg'] = 'success'
response['error_num'] = 0
except Exception,e:
response['msg'] = str(e)
response['error_num'] = 1

return JsonResponse(response)

@require_http_methods(["GET"])
def show_books(request):
response = {}
try:
books = Book.objects.filter()
response['list'] = json.loads(serializers.serialize("json", books))
response['msg'] = 'success'
response['error_num'] = 0
except Exception,e:
response['msg'] = str(e)
response['error_num'] = 1

return JsonResponse(response)

¿ÉÒÔ¿´³ö£¬ÔÚORMµÄ°ïæÏ£¬ÎÒÃǵĽӿÚʵ¼ÊÉϲ»ÐèÒª×Ô¼ºÈ¥×éÖ¯SQL´úÂë

6¡¢ ÔÚappĿ¼Ï£¬ÐÂÔöÒ»¸öurls.pyÎļþ£¬°ÑÎÒÃÇÐÂÔöµÄÁ½¸ö½Ó¿ÚÌí¼Óµ½Â·ÓÉÀ

from django.conf.urls import url, include
import views

urlpatterns = [
url(r'add_book$', views.add_book, ),
url(r'show_books$', views.show_books, ),
]

ÎÒÃÇ»¹Òª°ÑappϵÄurlsÌí¼Óµ½projectϵÄurlsÖУ¬²ÅÄÜÍê³É·ÓÉ£º

from django.conf.urls import url, include
from django.contrib import admin
from django.views.generic import TemplateView
import myapp.urls

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/', include(myapp.urls)),
url(r'^$', TemplateView.as_view(template_name="index.html")),
]

ÔÚÏîÄ¿µÄ¸ùĿ¼£¬ÊäÈëÃüÁ

python manage.py makemigrations myapp

python manage.py migrate

²éѯÊý¾Ý¿â£¬¿´µ½book±íÒѾ­×Ô¶¯´´½¨ÁË£º

ÔÚÏîÄ¿µÄ¸ùĿ¼£¬ÊäÈëÃüÁ

python manage.py runserver

Æô¶¯·þÎñ£¬Í¨¹ýpostman²âÊÔÒ»ÏÂÎÒÃǸղÅдµÄÁ½¸ö½Ó¿Ú£º

add_book

show_books

ËÄ¡¢ ¹¹½¨Vue.jsǰ¶ËÏîÄ¿

1¡¢ ÏÈÓÃnpm°²×°vue-cli½ÅÊּܹ¤¾ß£¨vue-cliÊǹٷ½½ÅÊּܹ¤¾ß£¬ÄÜѸËÙ°ïÄã´î½¨ÆðvueÏîÄ¿µÄ¿ò¼Ü£©£º

`npm install -g vue-cli`

°²×°ºÃºó£¬ÔÚprojectÏîÄ¿¸ùĿ¼Ï£¬Ð½¨Ò»¸öǰ¶Ë¹¤³ÌĿ¼£º

vue-init webpack appfront //°²×°ÖаÑvue-routerÑ¡ÉÏ£¬ÎÒÃÇÐëÒªËüÀ´×öǰ¶Ë·ÓÉ

½øÈëappfrontĿ¼£¬ÔËÐÐÃüÁ

npm install //°²×°vueËùÐëÒªµÄnodeÒÀÀµ

ÏÖÔÚÎÒÃÇ¿ÉÒÔ¿´µ½Õû¸öÎļþĿ¼½á¹¹ÊÇÕâÑùµÄ£º

2¡¢ ÔÚĿ¼srcϰüº¬Èë¿ÚÎļþmain.js£¬Èë¿Ú×é¼þApp.vueµÈ¡£ºó׺ΪvueµÄÎļþÊÇVue.js¿ò¼Ü¶¨ÒåµÄµ¥Îļþ×é¼þ£¬ÆäÖбêÇ©ÖеÄÄÚÈÝ¿ÉÒÔÀí½âΪÊÇÀàhtmlµÄÒ³Ãæ½á¹¹ÄÚÈÝ£¬±êÇ©ÖеÄÊÇjsµÄ·½·¨¡¢Êý¾Ý·½ÃæµÄÄÚÈÝ£¬¶øÔòÊÇcssÑùʽ·½ÃæµÄÄÚÈÝ£º

3¡¢ ÎÒÃÇÔÚsrc/componentÎļþ¼ÐÏÂн¨Ò»¸öÃûΪLibrary.vueµÄ×é¼þ£¬Í¨¹ýµ÷ÓÃ֮ǰÔÚDjangoÉÏдºÃµÄapi£¬ÊµÏÖÌí¼ÓÊé¼®ºÍչʾÊé¼®ÐÅÏ¢µÄ¹¦ÄÜ¡£ÔÚÑùʽ×é¼þÉÏÎÒÃÇʹÓÃÁ˶öÁËôÍŶÓÍÆ³öµÄelement-ui£¬ÕâÊÇÒ»Ì×רÃÅÆ¥ÅäVue.js¿ò¼ÜµÄ¹¦ÄÜÑùʽ×é¼þ¡£ÓÉÓÚ×é¼þµÄ ±àÂëÉæ¼°µ½Á˺ܶàjs¡¢html¡¢cssµÄ֪ʶ£¬²¢²»ÊDZ¾ÎĵÄÖØµã£¬Òò´ËÔÚ´ËÖ»Ìù³ö²¿·Ö´úÂ룺

4¡¢ ÔÚsrc/routerĿ¼µÄindex.jsÖУ¬ÎÒÃǰÑн¨µÄHome×é¼þ£¬ÅäÖõ½vue-router·ÓÉÖУº

5¡¢ Èç¹û·¢ÏÖÁбíץȡ²»µ½Êý¾Ý£¬¿ÉÄÜÊdzöÏÖÁË¿çÓòÎÊÌ⣬´ò¿ªä¯ÀÀÆ÷consoleÈ·ÈÏ£º

ÕâʱºòÎÒÃÇÐëÒªÔÚDjango²ã×¢Èëheader£¬ÓÃDjangoµÄµÚÈý·½°üdjango-cors-headersÀ´½â¾ö¿çÓòÎÊÌ⣺

pip install django-cors-headers

settings.py Ð޸ģº

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.
SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.
AuthenticationMiddleware',
'django.contrib.messages.middleware.
MessageMiddleware',
'django.middleware.clickjacking.
XFrameOptionsMiddleware',
]

CORS_ORIGIN_ALLOW_ALL = True

×¢ÒâÖмä¼þµÄÌí¼Ó˳Ðò

6¡¢ ÔÚǰ¶Ë¹¤³ÌĿ¼Ï£¬ÊäÈënpm run devÆô¶¯node×Ô´øµÄ·þÎñÆ÷£¬ä¯ÀÀÆ÷»á×Ô¶¯´ò¿ª£¬ ÎÒÃÇÄÜ¿´µ½Ò³Ã棺

³¢ÊÔÐÂÔöÊé¼®£¬ÐÂÔöµÄÊé¼®ÐÅÏ¢»áʵʱ·´Ó³µ½Ò³ÃæµÄÁбíÖУ¬ÕâµÃÒæÓÚVue.jsµÄÊý¾ÝË«Ïò°ó¶¨ÌØÐÔ¡£

ÔÚǰ¶Ë¹¤³ÌĿ¼Ï£¬ÊäÈënpm run build£¬Èç¹ûÏîĿûÓдíÎóµÄ»°£¬¾ÍÄܹ»¿´µ½ËùÓеÄ×é¼þ¡¢css¡¢Í¼Æ¬µÈ¶¼±»webpack×Ô¶¯´ò°üµ½distĿ¼ÏÂÁË£º

Îå¡¢ ÕûºÏDjangoºÍVue.js

ĿǰÎÒÃÇÒѾ­·Ö±ðÍê³ÉÁËDjangoºó¶ËºÍVue.jsǰ¶Ë¹¤³ÌµÄ´´½¨ºÍ±àд£¬µ«Êµ¼ÊÉÏËüÃÇÊÇÔËÐÐÔÚ¸÷×ԵķþÎñÆ÷ÉÏ£¬ºÍÎÒÃǵÄÒªÇóÊDz»Ò»Öµġ£Òò´ËÎÒÃÇÐëÒª°ÑDjangoµÄTemplateViewÖ¸ÏòÎÒÃǸղÅÉú³ÉµÄǰ¶ËdistÎļþ¼´¿É¡£

1¡¢ ÕÒµ½projectĿ¼µÄurls.py£¬Ê¹ÓÃͨÓÃÊÓͼ´´½¨×î¼òµ¥µÄÄ£°å¿ØÖÆÆ÷£¬·ÃÎÊ ¡º/¡»Ê±Ö±½Ó·µ»Ø index.html:

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/', include(myapp.urls)),
url(r'^$', TemplateView.as_view(template_name="index.html")),
]

2¡¢ ÉÏÒ»²½Ê¹ÓÃÁËDjangoµÄÄ£°åϵͳ£¬ËùÒÔÐèÒªÅäÖÃÒ»ÏÂÄ£°åʹDjangoÖªµÀ´ÓÄÄÀïÕÒµ½index.html¡£ÔÚprojectĿ¼µÄsettings.pyÏ£º

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['appfront/dist'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.
messages',
],
},
},
]

3¡¢ ÎÒÃÇ»¹ÐèÒªÅäÖÃһϾ²Ì¬ÎļþµÄËÑË÷·¾¶¡£Í¬ÑùÊÇprojectĿ¼µÄsettings.pyÏ£º

# Add for vuejs
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "appfront/dist/static"),
]

4¡¢ ÅäÖÃÍê³É£¬ÎÒÃÇÔÚprojectĿ¼ÏÂÊäÈëÃüÁîpython manage.py runserver£¬¾ÍÄܹ»¿´µ½ÎÒÃǵÄǰ¶ËÒ³ÃæÔÚä¯ÀÀÆ÷ÉÏÕ¹ÏÖ£º

×¢Òâ·þÎñµÄ¶Ë¿ÚÒѾ­ÊÇDjango·þÎñµÄ8000¶ø²»ÊÇnode·þÎñµÄ8080ÁË

Áù¡¢ ²¿Êð

ÓÉÓÚpythonµÄ¿çÆ½Ì¨ÌØÐÔ£¬Òò´ËÀíÂÛÉÏÖ»ÒªÔÚ·þÎñÆ÷Éϰ²×°ºÃËùÓеÄÒÀÀµ£¬Ö±½Ó°ÑÏîĿĿ¼¿½±´µ½·þÎñÆ÷Éϼ´¿ÉÔËÐС£ÕâÀïÖ»ÌáÒ»µã£ºÈç¹ûΪÏîÄ¿ÅäÖÃÁËnginx×÷Ϊ·´Ïò´úÀí£¬ÄÇôҪÔÚnginxÖÐÅäÖÃËùÓеľ²Ì¬Îļþpath¶¼Ö¸ÏòDjangoÏîÄ¿ÖÐÅäÖõľ²Ì¬Îļþurl£¬ÔÚsettings.pyÖпÉÅäÖÃurl·¾¶£º

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_URL = '/static/'

Æß¡¢ ÆäËû

ʵÀýÏîÄ¿µÄÔ­Âë¶¼¿ÉÒÔÔÚ¸Ãgit·¾¶ÏÂÔØ£º

https://github.com/rogerlh/django_with_vue.git

Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì

   
3200 ´Îä¯ÀÀ       27