目次:
CentOSでPythonをアップグレードする
easy_installとpipをインストールします
uwsgiのインストールとテスト
Djangoのインストールとテスト
uwsgiとDjangoを接続します
Nginxのインストールとテスト
uwsgiとnginxを接続します
uwsgiをDjangoおよびnginxに接続します
uwsgi ini
mysqlのインストール設定
python3 Djangomysql接続とテスト
ブログテストをすばやく作成する
ピチャーム開発
Djangoの開発を学びたいだけなら、Django独自の開発サーバーを使用してください。
1. CentOSでPythonをアップグレード
使用されているシステムはCentOS6.4、Pythonバージョンは2.6、Djangoでサポートされているバージョンは2.7以降であり、Web言語がUTF-8を使用し、python3 +のデフォルト文字がUnicodeになっていることを考慮すると、python3バージョンを選択します。正しいか間違っているかわからない。
pythonを前後に4回インストールしましたが、コンパイル時に特定のモジュールが見つからないという問題が発生するたびに、別のモジュールをインストールして再コンパイルする必要がありました。これらのモジュールは、
yum install zlib zlib-devel
yum install bzip2 bzip2-devel
yum install openssl openssl-devel
yum install sqlite-devel
インストール後にタールを塗ってください。ここで言いたいのは、組み込みのpyhtonがあるので、新しいディレクトリにインストールするので、上書きしないでください。
. /configure --prefix=/usr/local/python3.6&& make && make install
/ usr / binの下に、実際にはファイルであるpython、python2、python2.6があることがわかります。過去に、lnを配置しました。
ln -s /usr/local/python3.6/bin/python3.6/usr/bin/python
python -V
バージョンが変更されていることがわかります。しかし、このとき私はyumを使用して、残念ながらエラーを見つけました。
vim /usr/bin/yum
#! /usr/bin/python to#!/usr/bin/python2.6
以上で、CentOSでのpythonのインストールは終了です。
(注:今後、ln -sリンクを頻繁に実行したくない場合は、/ usr / local / python3.3 / binを環境変数として設定し、独自のネットワークを構成してください。)
**2. easy_installとpip **をインストールします
あなたにとっては簡単かもしれませんが、私にとっては難しすぎます。
wget https://bootstrap.pypa.io/ez_setup.py
python ez_setup.py
ln -s /usr/local/python3.6/bin/easy_install /usr/bin/easy_install
wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
python get-pip.py
チュートリアルで説明したように、インストールが完了した直後にpip -Vを実行できるはずです。その結果、コマンドが見つからないか、pipがコマンドとして自動的に設定されませんでした。pythonディレクトリに移動すると、pipが見つかりません。ファイル、どのファイルをlnにする必要があるので、長い間失敗した後、この方法が採用されました。
( 注:yumにpipをインストールする場合は、最初にEPELをインストールする必要があります。詳細についてはhttp://xmodulo.com/how-to-set-up-epel-repository-on-centos.htmlを参照し、対応するバージョンと対応するソリューションを選択してください。 Windowsでの構成が単純な場合もあれば、linuxを選択する必要がある場合もあります。 )
yum install python-pip
pip -V
次に、エラーを報告します。人々は常に現実の追求をどんどん低くしていきます。この命令がすでに発行されていることを示すエラーを報告するのはとても幸せです。エラーのチェックはバージョンの競合です。上記の1.5.6(現在は最新)をインストールし、yumは1.3をインストールしたため、本能からpipファイルをチェックしました。
1.3。Jiquanを1.5.6に変更します。
vim /usr/bin/pip
変更後:
#! /usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT:'pip==1.5.6','console_scripts','pip'
__ requires__ ='pip==1.5.6'import sys
from pkg_resources import load_entry_point
if __name__ =='__main__':
sys.exit(load_entry_point('pip==1.5.6','console_scripts','pip')())
賢く、バックアップしてから、yumがpython-pipを削除しました。確かに、pipはなくなりました。バックアップを復元すると、pipはようやく正常に使用されました。それは難しい!
長い間働いた後、ようやく話題になりました。なぜuwsgiを選んだのですか?Apacheのmod_wsgiの設定が難しすぎるからです。インターネットで見つけた情報は、人それぞれに独自のステップがあり、それぞれに独自のパスがあります。これはわかりません。たとえば、それを学ぶのとは異なります。1人の人からだけ学んでも大丈夫ですか?問題が発生した場合でも、他の人に行く必要があります。結局のところ、誰もがさまざまな問題に直面します。問題に遭遇し、問題を見つけ、問題を解決するこの1日のスタートでは、mod_wsgiのさまざまな頑固な病気の治療法として知られているgoto startでuwsgiが見つかり、nginxとも一致するので、これを作成しましょう。
pip install uwgsi
ln -s /usr/local/python3.6/bin/uwsgi /usr/bin/uwsgi
今それをテストしましょう、
vim test.py
# test.py
def application(env, start_response):start_response('200 OK',[('Content-Type','text/html')])return[b"Hello World"] # python3
# return["Hello World"] # python2
uwsgi --http :8001--wsgi-file test.py
このとき、http:// localhost:8001にアクセスして、成功しているHelloWorldを確認してください。
(補足:成功は簡単ではありません。なぜどこでもチュートリアルが「xxxxx」を返すのに、Webページに出力がありません。公式Webサイトを見つけて、bを追加する必要があることがわかりました。理由はもちろんバージョンが異なるためです。ただし、python3では、文字はデフォルトでユニコードであるため、エンコードする必要があります。b "xxx"は "xxx" .encode( 'utf-8')に変更することもできますが、テキストの前に#--コーディング:UTF-8--しかし、それは機能しません。
python3では、テキストは常にUnicodeであり、strタイプで表され、バイナリデータはバイトタイプで表されます。
uwsgi -s:8001 -wsgi-file test.py、無効な要求ブロックサイズ:21573(最大4096)... usgiパラメーター-sは通信ポートがソケットモードで提供され、デフォルトのプロトコルがtcpであることを意味するため、アクセス時にスキップが表示されます。 nginxを介してuwsgiにアクセスする場合、それは問題ではありません。 )
4. Djangoのインストールとテスト
ここでのテストでは、sqliteモジュールが使用されます。
pip install django
cd /usr/local/python3.6/bin/
python django-admin.py startproject myproject
cd myproject
python manage.py runserver 0.0.0.0:8002
ブラウザを開き、http:// localhost:8002にアクセスして、「機能しました!..、成功」と表示します。今は賢くなっています。連絡を取るためにさらにいくつかのチュートリアルを読みますが、間違いを犯すのは簡単ではありません。
5. uwsgiとDjangoを接続します
いくつかのチュートリアルは表示されません。django_wsgiを作成するために実行してください。バージョンは必要ありません。myproject.wsgiだけが必要です。
uwsgi --http :8004--chdir /home/wwwroot/default/myproject --module myproject.wsgi
成功はそれが働いた!で見ることができます。
6. nginxのインストールとテスト
yum install nginx
service nginx start
ブラウザがlocalhostにアクセスすると、EPEL!のnginxへようこそ!が成功します。ただし、この方法は使用しないでください。自動インストールの関連する構成がわからないため、ソースインストールを選択する必要があります。私の貪欲さと単純さのために、後で多くの許可の問題に遭遇し、最終的に再インストールしましたが、次の章の多くは上記の構成モードで実行され、私はそれを変更するのが面倒です。
この前に、インストールする環境、特にPcreがかなりあります。
yum install patch make cmake gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel vim-minimal nano fonts-chinese gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap diffutils
wget http://soft.vpser.net/web/pcre/pcre-8.30.tar.gz
tar it configure make make install
groupadd www
useradd -s /sbin/nologin -g www www
wget http://soft.vpser.net/web/nginx/nginx-1.6.2.tar.gz
tar it
. /configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6
make && make install
インストールが完了した後、2つの起動方法があります。
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
/usr/local/nginx/sbin/nginx
よくわからないので、毎回設定ファイルを読み直すので、最初のものを使います。このとき、libpcre.so.1が見つからないというプロンプトが表示されるので、
find /-name "libpcre.so.*"
libpcre.so.0.0.1は/ lib64の下にあり、32ビットは/ libの下にあります。lnを実行しましょう、
ln -s /lib64/libpcre.so.0.0.1/lib64/libpcre.so.1
次に、nginxを再起動します。エラーは発生せず、ブラウザを開いてhttp:// localhostにアクセスすると、EPEL!でnginxへようこそ!が表示されます。
7. uwsgiとnginxを接続します
Nginxのユーザー権限は非常に心配ですが、インターネット上のほとんどの人が私の問題に遭遇していません。最初はログパスを変更したかったのです。ユーザーはnginx.confのnginxであることがわかります。フォルダの権限を、所有者であるa + rwxに変更しました。 nginxに変更しても、許可は拒否されます。また、/ var / run / nginx.pidは起動するたびに見つからないため、サービスnginxstartは使用できません。最後に、startメソッドが/ usr / sbin / nginx -c / etc / nginx / nginx.confに変更されます。
最初は、myproject.confをconf.dディレクトリに書き込むことを選択しましたが、最小限の変更の原則に基づいて、どこでも許可が拒否されないようにするために、nginx.confを次のように変更するだけです。
vim /etc/nginx/nginx.conf
httpで{}次のように追加します。
upstream django {
server 127.0.0.1:8001; # for a web port socket
}
server {
listen 8000;
server_name xqlm.com; # substitute your machine's IP address or FQDN
charset utf-8;
client_max_body_size 75M; # adjust to taste
# location /media {
# alias /path/to/your/mysite/media; # your Django project's media files - amend as required
#}
# location /static{
# alias /path/to/your/mysite/static; # your Django project's static files - amend as required
#}
# Finally, send all non-media requests to the Django server.
location /{
root /プロジェクトディレクトリ/myproject;
uwsgi_pass django;
include uwsgi_params; # the uwsgi_params file you installed
}}
upstream django {
** server 127.0.0.1:8001; # for a web port socket**
** }**
location / {
**ルート/プロジェクトディレクトリ/ myproject; **
** uwsgi_pass django;**
** include uwsgi_params; # the uwsgi_params file you installed**
** }**
(重要)
変更が完了した後、
uwsgi --socket :8001--wsgi-file test.py
ブラウザがhttp:// localhost:8000にアクセスすると、Hello worldが表示されます!成功を示すため。ここでは、これらのポート間の関係を説明する必要があります。ユーザーのアクセスは8000で、これはnginx.confのサーバーリッスンに対応します。その後、nginxはこの情報をnginx.confのdjango 8001に中継します。これは、uwsgiコマンドの開始時にリッスンします。港。次に、それをuwsgiに直接転送することはできませんか?なぜ中央にnginxを挿入する必要があるのですか?オンラインの回答を使用して、「UWSGIだけでは不十分です。実際の展開環境では、Nginxは不可欠なツールです。Nginxは優れた静的コンテンツ処理機能を備えており、動的コンテンツをuWSGIサーバーに転送します。非常に優れたクライアントの応答を実現できます。」上記のサーバーには、コメントアウトされた場所/ staticと/ mediaがあり、それぞれ静的コンテンツと動的コンテンツを表していますが、現在は空のプロジェクトであるため、必要ありません。後で説明します。
**8. uwsgiをDjangoおよびnginx **に接続します
uwsgi --socket :8001--module myproject.wsgi
(許可の問題がある場合は、必要に応じて--chmod-socket = 664または666を追加します。通常はmysite.sockを使用することで発生しますが、指定されたポートでは発生しません。)
前の手順がテストされ、各手順は正しかったです。今では問題はないはずです。ブラウザで直接http:// localhost:8000にアクセスすると、正常に機能します。
9. uwsgi ini
uwsgiが毎回長いパスのリストをたどってから、iniファイルまたはxmlを書き込むのは不便だと思いますか。ここでは、iniバージョンのみを示します。
vim myproject_uwsgi.ini
# mysite_uwsgi.ini file
[ uwsgi]
# Django-related settings
# the base directory(full path)
chdir =/home/wwwroot/default/myproject
# Django's wsgi file
module = myproject.wsgi
# the virtualenv(full path)
# home =/path/to/virtualenv
# process-related settings
# master
master =true
# maximum number of worker processes
processes =10
# the socket(use the full path to be safe)
# socket =/path/to/your/project/mysite.sock
socket =:8001
# ... with appropriate permissions - may be needed
# chmod-socket =664
# clear environment on exit
vacuum =true
上記は、一般的に使用されている非常に完全な構成の公式Webサイトからのものであり、必要に応じて調整できます。次のように始めましょう。
uwsgi --ini myproject_uwsgi.ini
ブラウザは8000を訪問しました、それはうまくいきました!。
10. mysqlのインストール設定
mysqlのインストールについて言うことはあまりありませんが、
yum install mysql mysql-devel mysql-server
/etc/rc.d/init.d/mysqld start
/usr/bin/mysqladmin -u root password yourpassword
ここでは、djangoが使用する新しいユーザーを作成します。
mysql -u root -p
mysql> create database myprojectdb;
mysql> use mysql;
mysql> insert into user(Host,User,Password)values('localhost','niger',password('niger'));
mysql> flush privileges;
mysql> grant all privileges on myprojectdb.* to 'niger'@'localhost' identified by 'niger';
11. python3 Djangomysql接続とテスト
最初にpythonとmysqlの接続モジュール(現在はpython3)をインストールし、mysql-connector-pythonを選択してから、myprojectディレクトリにdjangoのsettings.pyファイルを設定します。Baiduで探しているものが本当に見つかりません。Googleで検索してください。簡単に解決できます。
pip install --allow-all-external mysql-connector-python
vim myproject/settings.py
DATABASES ={'default':{'ENGINE':'mysql.connector.django','NAME':'myprojectdb','USER':'niger','PASSWORD':'niger',}}
データベースは上記のように設定できます。エンジンは、インストールしたmysql.connectorの下のdjangoモジュールであり、他の名前はその意味を認識します。それが成功するかどうかをテストしましょう。
python manage.py migrate
Operations to perform:
Apply all migrations: contenttypes, admin, auth, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying sessions.0001_initial... OK
上に示したように、通常の操作(最初に実行すると管理ユーザーが作成されます)、次のようにデータベースを確認してください。
mysql> use myprojectdb;
mysql> show tables;+----------------------------+| Tables_in_myprojectdb |+----------------------------+| auth_group || auth_group_permissions || auth_permission || auth_user || auth_user_groups || auth_user_user_permissions || django_admin_log || django_content_type || django_migrations || django_session |+----------------------------+10 rows inset(0.00 sec)
12. ブログをすばやく作成する
djangoの組み込みの管理バックエンドを使用して、ブログをすばやく作成します。各コードの意味については、さらに記述しておくとわかります。
python manage.py startapp blog
myprojectディレクトリにブログフォルダがあることがわかりました。その中にmodels.pyを入力して変更します。
vim models.py
from django.db import models
# Create your models here.classBlogsPost(models.Model):
title = models.CharField(max_length =150)
body = models.TextField()
tiemstamp = models.DateTimeField()
BlogsPostクラスを作成し、django.db.models.Model親クラスを継承し、title(ブログタイトル)、body(ブログ本文)、tiemstamp(ブログ作成時間)の3つの変数を定義します(ここでは時間はtiemと表記され、引き続き続きます。うまくいかない。)
djangoのディレクトリ構造を覚えておく必要があります。次に、myproject / myproject / settings.pyに戻り、アプリを追加します:blog、
vim settings.py
# Application definition
INSTALLED_APPS =('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','blog',)
次のように、myproject / myproject / urls.pyをもう一度見てください。管理アイテムが存在している必要があります、
urlpatterns =patterns('',
# Examples:
# url(r'^$','mysite.views.home', name='home'),
# url(r'^blog/',include('blog.urls')),url(r'^admin/',include(admin.site.urls)),)
blog / models.pyに戻り、データを管理バックエンドに追加して、それに応じて変更します
vim models.py
from django.db import models
from django.contrib import admin
# Create your models here.classBlogsPost(models.Model):
title = models.CharField(max_length =150)
body = models.TextField()
timestamp = models.DateTimeField()
admin.site.register(BlogsPost)
データベースを初期化したので、対応する変更後に再度初期化する必要があることを忘れないでください。
python manage.py makemigrations
python manage.py migrate
これで、データベースは正常に変更されました。
次に、Webサイトを起動します(uwsgi -int myproject_uwsgi.ini、このコマンドは後で添付されません。もちろん、nginxが実行されていることを確認する必要があります)。http:// localhost:8000 / admin /にアクセスすると、ログインウィンドウDjangoの管理、ユーザー名、パスワード、ログイン、ログイン方法、作成したユーザーを覚えて、ログインするだけです。
スタイルがある場合はスキップし、ない場合は解決します。
右クリックして要素またはファイアバグを確認し、コンソールウィンドウに転送してページを更新し、cssエラーを見つけます。それをクリックしてパスが見つからないため、スタイルが読み込まれません。エラーを確認するときは、localhost:8000 / static / admin / cssの下のスタイルにアクセスして、さまざまな情報を確認します。次に、静的を使用します。 myprojectの下に新しいスタティックを作成し、nginxを設定して、cssコードを転送します(他の人に、それがdjangoディレクトリにあることを確認してください)。
mkdir static
vim /etc/nginx/nginx.conf
静的コメントを解放して変更する
location /static{
alias /プロジェクトパス/myproject/static; # your Django project's static files - amend as required
}
find /-name django
/usr/share/doc/python-mako-0.3.4/examples/bench/django
/usr/lib/python2.6/site-packages/mysql/connector/django
/usr/local/python3.3/lib/python3.3/site-packages/mysql/connector/django
/usr/local/python3.3/lib/python3.3/site-packages/django
/root/download/mysql-connector-python-2.0.2/lib/mysql/connector/django
/root/download/mysql-connector-python-2.0.2/build/lib/mysql/connector/django
結果から一致するものを見つけてください。答えは明らかです。djangoディレクトリ内のファイルをプロジェクトにコピーすると、完全に対応していることがわかります。
[ root@localhost myproject]# cp -rf /usr/local/python3.3/lib/python3.3/site-packages/django/contrib/admin/static/admin/ static/
関連するディレクトリ構造を見てください。この時点で、nginxを再起動し、Webサイトを開始し、
/etc/rc.d/init.d/nginx stop
/usr/sbin/nginx -c /etc/nginx/nginx.conf
なぜこのように停止して開始したいのですか?nginx.confのユーザーをrootに変更しても、さまざまなアクセス許可が拒否されますが、エラーは報告されません。このとき、アクセスしたWebサイトの表示スタイルは正常に読み込まれます。 )
ログイン後、ブログを書きます。
タイトル、本文、tiemstamp(ハハ、これがプログラムで書いたものであることを示すために意図的に間違って書いた)、これら3つの変数はBlogsPostクラスで定義されていますね。書き込み後に[保存]をクリックすると、ブログ投稿「BlogsPostオブジェクト」が正常に追加されました。対応する関係をどのように見つけましたか?
しかし、あなたがそうであるように、BlogsPostオブジェクトが表示されるたびに、それは良くありません。どの投稿であるかをどうやって知るのですか?
models.py,from django.db import models
from django.contrib import admin
# Create your models here.classBlogsPost(models.Model):
title = models.CharField(max_length =150)
body = models.TextField()
tiemstamp = models.DateTimeField()classBlogPostAdmin(admin.ModelAdmin):
list_display =('title','tiemstamp')
admin.site.register(BlogsPost,BlogPostAdmin)
コードの変更に注意してください。ウェブサイトを再起動すると、再びウェブサイトの同じ場所に移動します。
したがって、間違ったtiemstampがすべてを説明します。単純なバックエンドで完了しました。次に、フロントエンドがどのようになっているのかを確認します。
Djangoの観点から、ページには3つの典型的なコンポーネントがあります。
テンプレート:テンプレートは、渡された情報を表示する役割を果たします。
ビュー:ビューは、データベースから表示する必要のある情報を取得する役割を果たします。
URLパターン:受信したリクエストをビュー関数と照合する役割を果たし、一部のパラメーターをビューに渡す場合があります。
テンプレートを作成する
ブログプロジェクトの下にテンプレートディレクトリを作成し、次の内容のディレクトリにテンプレートファイルarchive.htmlを作成します。
{ %for post in posts %}<h2>{{ post.title }}</h2><p>{{ post.tiemstamp }}</p><p>{{ post.body }}</p>{% endfor%}
テンプレートパスを設定し、myproject / myproject / settings.pyファイルを開いて、ファイルの下部にテンプレートパスを追加します。
# template
TEMPLATE_DIRS=('/プロジェクトパス/myproject/blog/templates',)
ビュー機能の作成
myprojectを開く/blog/views.pyファイル:
from django.shortcuts import render
from django.template import loader,Context
from django.http import HttpResponse
from blog.models import BlogsPost
# Create your views here.
def archive(request):
posts = BlogsPost.objects.all()
t = loader.get_template("archive.html")
c =Context({'posts':posts})returnHttpResponse(t.render(c))
posts = BlogPost.objects.all():データベースが所有するBlogPostオブジェクトを取得します
t = loader.get_template(“archive.html”):テンプレートをロード
c =Context({‘posts’:posts}):テンプレートのレンダリングされたデータは、辞書オブジェクトContextによって提供されます。これは、キーと値のペアのペアです。
ブログのURLパターンを作成する
myprojectで/urls.pyファイルにブログのURLを追加します。
urlpatterns =patterns('',
# Examples:
# url(r'^$','mysite.views.home', name='home'),url(r'^blog/',include('blog.urls')),url(r'^admin/',include(admin.site.urls)),)
myprojectで/blog/ディレクトリの下にURLを作成します.pyファイル:
from django.conf.urls import*from blog.views import archive
urlpatterns =patterns('',url(r'^$',archive),)
urls.pyファイルがブログアプリケーションの下に作成される理由は、結合を減らすためです。このように、myproject /urls.pyファイルは各プロジェクトのURL用です。 Webサイトを再起動し、http:// localhost:8000 / blog /にアクセスすると、最も単純なページが表示されます。
ページは少し単調だと思いますか、どのように調整しますか?これは、スタイルの追加についてです。
(cssファイルはstatic / admin / css /の下に統合されており、ここに埋め込むだけです。)
スタイルを追加
myprojectで/blog/テンプレートディレクトリにベースを作成します.htmlテンプレート:
< html><style type="text/css">
body{color:#efd;background:#453;padding:0 5em;margin:0}
h1{padding:2em 1em;background:#675}
h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}
p{margin:1em 0}</style><body><h1>Niger blog</h1><h3>From Team Fith4_D3vil</h3>{% block content %}{% endblock %}</body></html>
base.htmlテンプレートとその「コンテンツ」ブロックを参照するようにarchive.htmlテンプレートを変更します。
{ %extends"base.html"%}{% block content %}{%for post in posts %}<h2>{{ post.title }}</h2><p>{{ post.tiemstamp | date:"1,F jS"}}</p><p>{{ post.body }}</p>{% endfor %}{% endblock %}
ページをもう一度更新すると、別のスタイルが表示されます。
13. pycharm開発
上記のような複雑な環境を構築する必要があるのはなぜですか?それはウェブサイトの公開環境だからです。django開発者にとって、上記のすべては絶対に不要です。必要なpycharmは1つだけです。pycharm4.0はdjango開発を統合します。WindowsまたはLinuxで、pythonをインストールし、djangoをインストールするだけです(不要です。pycharmが自動的にインストールします)。pycharmを開くと、デフォルトのページで新しいプロジェクトを作成し、djangoを選択します。 、プロジェクト名とアプリ名を入力します。 djangoフレームワーク全体が自動的に構築され、直接実行できます。とても便利。
Recommended Posts