Cool framework
“Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.” - Django [1]
“Django is a free and open-source, Python-based web framework that runs on a web server. It follows the model–template–views architectural pattern. It is maintained by the Django Software Foundation, an independent organization established in the US as a 501 non-profit.” - Wikipedia [2]
Avoimeen lähteeseen perustuva Django on web-kehys joka toimii Pythonilla. Django on helppo käyttää ja ottaa käyttöön, ja Django tarjoaa kaiken mahdollisen tarvittavan ohjelmiston tai web-sovelluksen kehitykseen. [3]
“PostgreSQL (pgsql) on SQL-kieltä tukeva avoimen lähdekoodin tietokantamoottori.” - Linux.fi-wiki [4]
Aloitin tehtävän la 28.9 klo 11:25
Minulla oli tehtävää varten valmiina virtuaalinen palvelin.
Tein alkutoimet.
Seurasin opettajan ohjeita: Django 4 Instant Customer Database Tutorial. [5]
Asensin virtuaaliympäristön palvelintietokoneelle:
sudo apt-get -y install virtualenv
Tein uuden ympäristön Djangoa varten:
virtualenv --system-site-packages -p python3 env/
Nyt minulla oli uusi kansio env/
, jossa tarvittavat paketit. Otin uuden ympäristön käyttöön komennolla:
source env/bin/activate
Käyttäjätunnukseni edessä lukee (env), käytän eri ympäristöä.
which pip
/home/leonardo/env/bin/pip
Minulla oli jo Micro editori, versio 2.0.11
Tein microdokumentti requirements.txt, kirjoitin django
, ja tallensin sen virtuaaliympäristöön
Sen jälkeen komento:
pip install -r requirements.txt
Sain ladattua djangon
micro crm/models.py
Lisäsin models.py esimerkkikoodia opettajan esimerkistä:
from django.db import models
class Customer(models.Model):
name = models.CharField(max_length=160)
def __str__(self):
return self.name
Lähde terokarvinen.com. [6]
./manage.py makemigrations
./manage.py migrate
Rekisteröin tietokannan:
micro crm/admin.py
ja lisäsin tiedostoon seuraavan pätkän:
admin.site.register(models.Customer)
Lähde terokarvinen.com. [6]
Olin lukenut opettajan ohjeet loppuun, tässä vaiheessa halusin kokeilla mitä sain aikaiseksi.
Käytin komentoa:
./manage.py runserver
Sain virheviestin
admin.site.register(models.Customer)
^^^^^^
NameError: name 'models' is not defined
Koodipätkä on tiedostossa crm/admin.py
. Koodista puuttui from . import models
. Lisäsin sen
from django.contrib import admin
from . import models
admin.site.register(models.Customer)
Tarkistin uudelleen:
./manage.py runserver
Sain tulokseksi:
Tässä vaiheessa en ollut varma että toimiiko Django niinkuin pitäisi.
curl -s localhost|grep title # access without GUI
Sain osoitteen http://127.0.0.1:8000/
josta olisin voin tarkistaa selaimella, mutta käytän Djangoa palvelimen kautta. Curl komennolla pitäisi näkyä että näkyykö sivu, mutta saan virheviestin:
curl: (7) Failed to connect to 127.0.0.1 port 8000 after 0 ms: Couldn't connect to server
Klo 13:05 otan taukoa, ja palaan myöhemmin kokeilemaan eri keinoja, joilla saisin Django käynnistymään oikein.
Klo 15:55 aloitin uudelleen.
Päätin yrittää Djangon käynnistystä paikallisesti, Raspberry Pi -tietokoneella.
Aloitin käymällä läpi seuraavat sivut
Seurasin opettajan ohjeita uudelleen. Käynnistys näytti onnistuvan.
./manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
September 27, 2024 - 17:29:11
Django version 5.1.1, using settings 'folder.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Selaimessa kuitenkin:
Lopetin 28.9 17:35
Tulin illemmalla takaisin, kokeilin vielä kerran Djangon käyttöönottoa onnistumatta.
Päätin aloittaa tyhjältä pöydältä.
Poistin Djangon, sille luomani ympäristön ja Apachen. Epäilin että Apachella olisi vaikutusta. # https://stackoverflow.com/questions/30670759/run-django-without-apache-using-runserver-on-port-80-and-accessible-outside-lan
Sitten kokeilin uudestaan, seuraamalla opettajan ohjeita.
29.9 klo 0:11 Djangon raketti näkyi selaimella.
CRM
Tässä välissä tein käyttäjän leonardo
Lisäsin settings.py
tiedostoon rivin 'crm'
models.py
tiedostoon lisäsin python koodin:
from django.db import models
class Customer(models.Model):
name = models.CharField(max_length=160)
def __str__(self): # new
return self.name # new
admin.py
tiedostoon:
from django.contrib import admin
from . import models
admin.site.register(models.Customer)
Yritin käynnistää Djangon, mutta sain virheviestin Error: that port is already in use
Hain tietoa Googlesta, ja löysin ohjeen miten sulkea käynnissä olevat portit.
A more simple solution just type sudo fuser -k 8000/tcp. This should kill all the processes associated with port 8000.
EDIT:
For osx users you can use sudo lsof -t -i tcp:8000 xargs kill -9
edited Nov 17, 2015 at 12:49 answered Nov 27, 2013 at 10:53
Kokeilin mitkä portit ovat estämässä. Vahingossa suljin selaimen, mutta samalla varmistuin että syntaksi toimii:
CRM toimii. Selailin Djangoa ja lisäsin uuden käyttäjän.
Aloitin klo 29.9 22.24. Seuraan opettajan ohjeita
Päivitin koneen ja käynnistän Apachen.
sudo apt-get update
sudo systemctl start apache2
Tein uuden kansion:
mkdir -p publicwsgi//tuotantoDjango/static/
Valmistelin .html
tiedoston:
echo "Statically see you at llanga.live."|tee publicwsgi/tuotantoDjango/static/index.html
Lisäsin konfiguraatioasetuksiin polun
Alias /static /home/uhse/publicwsgi/tuotantoDjango/static/
<Directory /home/uhse/publicwsgi/tuotantoDjango/static/>
Require all granted
</Directory>
Sivuasetukset:
sudo a2dissite 000-default.conf
sudo a2ensite llanga.live.conf
Django virtuaaliympäristön asennus
echo "Statically see you at llanga.live."|tee publicwsgi/tuotantoDjango/static/index.html
cd publicwsgi/
virtualenv -p python3 --system-site-packages env
source env/bin/activate
Pääsin virtuaaliympäristöön, josta pääsin asentamaan Djangon.
pip install -r requirements.txt
Successfully installed django-4.2.16
Sitten aloitin Django projektin:
django-admin startproject tuotantoDjango
micro /etc/apache2/sites-available/llanga.live.conf
Muokkasin opettajan esimerkkiä ja vaihdoin kansion nimen, sekä polun:
Define TDIR /home/uhse/publicwsgi/tuotantoDjango
Define TWSGI /home/uhse/publicwsgi/tuotantoDjango/wsgi.py
Define TUSER uhse
Define TVENV /home/uhse/publicwsgi/env/lib/python3.9/site-packages
<VirtualHost *:80>
Alias /static/ ${TDIR}/static/
<Directory ${TDIR}/static/>
Require all granted
</Directory>
WSGIDaemonProcess ${TUSER} user=${TUSER} group=${TUSER} threads=5 python-path="${TDIR}:${TVENV}"
WSGIScriptAlias / ${TWSGI}
<Directory ${TDIR}>
WSGIProcessGroup ${TUSER}
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
Undefine TDIR
Undefine TWSGI
Undefine TUSER
Undefine TVENV
Apachen moduuli virtuaaliympäristössä:
sudo apt-get -y install libapache2-mod-wsgi-py3
/sbin/apache2ctl configtest
sudo systemctl restart apache2
curl -s localhost|grep title
Virhe:
<title>404 Not Found</title>
Tarkistin lokista:
sudo tail -f /var/log/apache2/error.log
Loki:
Mon Sep 30 00:10:04.536650 2024] [wsgi:error] [pid 4838:tid 4847] [client ::1:59554] Target WSGI script not found or unable to stat: /home/uhse/publicwsgi/tuotantoDjango/wsgi.py
[Mon Sep 30 00:12:11.162752 2024] [wsgi:error] [pid 4838:tid 4852] [client 127.0.0.1:44910] Target WSGI script not found or unable to stat: /home/uhse/publicwsgi/tuotantoDjango/wsgi.py
Tarkemmin:
Target WSGI script not found or unable to stat: /home/uhse/publicwsgi/tuotantoDjango/wsgi.py
Eli Django ei päässyt käsiksi wsgi.py
tiedostoon. Tarkistin missä tiedosto on -> /home/uhse/publicwsgi/tuotantoDjango/tuotantoDjango/wsgi.py.
Ajoin django-admin startproject
komennon tuotantoDjango kansion sisällä, joka loi uuden samannimisen kansion , jossa kyseinen tiedosto oli.
Kävin vaihtamassa .conf
tiedostossa poluksi /home/uhse/publicwsgi/tuotantoDjango/tuotantoDjango/wsgi.py.
Django käynnistyi.
Debug ottaminen pois käytöstä. Näin rikolliset tai muut eivät pääse näkemään tarkasti virheviestejä.
micro tuotantoDjango/settings.py
Vaihdoin ALLOWED_HOSTS
muuttujan True
:ksi
ALLOWED_HOSTS = ["localhost", "llanga.live"]
Sekä lisäsin:
import os
ja:
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Sen jälkeen:
touch tuotantoDjango/wsgi.py
sudo systemctl restart apache2
Tein uuden käyttäjän leonardo
, jotta pääsen käyttämään Djangoa.
Klo 01:00 tuotantotyyppinen Django oli valmis
Tehtävä osoittautui hankalaksi, ja kokeilin CHATGPT.
Prompt:
PostgreSQL käyttöönotto Djangossa (env) ympäristössä
Vastauksena sain ohjeet:
Asenna psycopg2-kirjasto, joka mahdollistaa Djangon yhteyden PostgreSQL:ään:
pip install psycopg2
Avaa projektisi settings.py-tiedosto ja muuta tietokantakonfiguraatiota PostgreSQL:ksi :
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_db_name',
'USER': 'your_db_user',
'PASSWORD': 'your_db_password',
'HOST': 'localhost', # tai '127.0.0.1'
'PORT': '5432', # Oletusportti
}
}
Siirry PostgreSQL komentoikkunaan:
sudo -u postgres psql
Luo uusi tietokanta:
CREATE DATABASE your_db_name;
CREATE USER your_db_user WITH PASSWORD 'your_db_password';
ALTER ROLE your_db_user SET client_encoding TO 'utf8';
ALTER ROLE your_db_user SET default_transaction_isolation TO 'read committed';
ALTER ROLE your_db_user SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE your_db_name TO your_db_user;
Poistu PostgreSQL-komentoriviltä:
\q
Luo malleja models.py-tiedostoon ja suorita migraatiot:
# myapp/models.py
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=100)
value = models.IntegerField()
Suorita seuraavat komennot:
python manage.py makemigrations
python manage.py migrate
Avaa Python shell Djangossa ja testaa tietojen tallentamista:
python manage.py shell
from myapp.models import MyModel
# Luo uusi objekti
obj = MyModel(name='Test', value=123)
obj.save() # Tallenna tietokantaan
Voit tarkistaa tiedot PostgreSQL komentoikkunasta:
sudo -u postgres psql your_db_name
SELECT * FROM myapp_mymodel; -- Varmista, että objekti tallentui
————-CHATGPT vastaus loppuu ———–¢
Kokeilin ChatGPT vastauksia, se näytti jotenkin järkevältä mutta ei toiminut.
settings.py
./manage.py migrate
Huomasin että PostgreSQL sisällä komentojen käyttö oli vaikeata, sain usein syntaksivirheitä. Epäonnistuin luomaan käyttäjän oikealla tavalla, josta tuli myöhemmin virheitä kun yritin ajaa komennon ./manage.py migrate
. Esim.
psycopg2. OperationalError: FATAL: password authentication dailed for user "leonardo"
FATAL: password authentication failed for user "leonardo"
Näin että ongelma oli salasanassa, mutta muuten PostgreSQL pitäisi toimia. Yritän kokeilla myöhemmin uudelleen.
Lopetin klo 30.9 02:40
PÄIVITYS 2.10.2024 klo 16:50
Yritin saada PostgreSQL-tietokannan toimimaan Djangossa, ennen tuntia. En ymmärtänyt missä vika oli, vaihdoin settings.py
-tiedostossa salasanan, olin jo kokeillut ilman salasanaa sekä salasanalla, jota varmasti käytin luodessani käyttäjän.
Ei onnistunut, sain edelleen saman virheviestin:
django.db.utils.OperationalError: FATAL: password authentication failed for user "leonardo"
FATAL: password authentication failed for user "leonardo"
Kirjoitin saman virheviestin googleen, poistin oman käyttäjänimen ja kansionimen. Löysin StackOverFlow:sta vastaavan kysymyksen. Ensimmäinen vastaaja ehdotti salasanan vaihtamista PostgreSQL:ssä, kokeilin sitä ensin myös:
[11]
Suljin tietokannan, ja kokeilin ./manage.py makemigrations
uudelleen, ja sain saman virhekoodin. Tämä ei kuitenkaan toiminut, sillä syntaksini oli väärä.
Tietokantojen komennoissa, oikeinkirjoitus ja ;
merkki ovat tärkeitä.
SQL- harjoituksista oli jo vähän aikaa, ja ennenkuin tajusin edes virhettä. Päätin poistaa käyttäjän.
Mieleeni tuli poistaa kyseinen käyttäjä, ja luoda uusi. Näin voisin ainakin saada tietokannan toimimaan.
Etsin tietoa googlesta hakemalla:
Google: how to delete users in postgres
Löysin PosgreSQL: sivuilta dropuser
komennon, mutta ihmettelin syntaksia, komennot olivat kirjoitettu pienellä.
[12]
Avasin uudelleen tietokannan ja yritin poistaa käyttäjän leonardo
:
Ensin oli syntaksivirheitä, sain ne korjattua.
Toiseksi, en voinut poistaa käyttäjää koska siihen oli sidottu koko tietokanta.
Samasta kysymysketjusta löysin
What worked for me on AWS RDS (PostgreSQL 13) is the following:
REVOKE ALL PRIVILEGES ON DATABASE <my_db> FROM <my_user>;
I also had a similar error where the role was owner for tables so it couldn't be dropped, had to re-assign table owner with:
ALTER TABLE <my_table> OWNER TO <trusted_role>;
In fact, on RDS, AWS doesn't give you full superuser to your master user, so the following REASSIGN command fails:
REASSIGN OWNED BY <olduser> TO <newuser>;
edited May 6 at 11:34
Eddie C.'s user avatar
Eddie C.
9961010 silver badges1818 bronze badges
answered Sep 16, 2021 at 19:48
Andrew's user avatar
Andrew
Peruin leonardo
-käyttäjän oikeudet, jonka jälkeen järjestelmä suostui poistamaan käyttäjän. Tarkistin vielä käyttäjän komennolla \du
Käyttäjä oli poistunut onnistuneesti. Nyt voisin kokeilla uudestaan tietokannan käyttöönottoa.
Päätin jatkaa myöhemmin, koska tunti oli alkanut jo.
Tunnin aikana tein seuraavan:
Tein käyttäjän uudelleen, käytin samaa käyttäjänimeä ja salasanaa, joten settings.py
-tiedostoa ei tarvinnut muokkaa.
Tällä kertaa Django käynnistyi OK, mutta sain virhekoodin [02/Oct/2024 16:09:09] "GET / HTTP/1.1" 400 143
kun yritin avata selaimella.
Päivitys 11.10.2024
Kokeilin tehtävää uudellee, tällä kertaa Debian 12 käyttöjärjestelmällä, Intel Macbookin kanssa.
Olin myös perehtynyt paremmin PostgreSql kantaan ja sen komentoihin.
Seurasin uudestaan opettajan ohjeita. terokarvinen.com
Tein leovice käyttäjästä superuserin, sillä olisi pitänyt pystyä tekemään tietokanta, mutta sain virheen aina kun yritin luoda taulua.
Lopulta kirjauduin suoraan Superuser:na, ja pääsin heti ja helposti muokkaamaan tietokantaa.
Tietokannassa näkyi juuri lisätyt aiheet.