شروع مقدماتی برای Python Flask با کاپیتان کد (3)

سلام.

بعد از مدت زیادی دوباره اومدیم با کایپتان کد، قسمت سوم از سری شروع مقدماتی برای Python Flask

جلسه ی قبلی اومدیم و این دو کار رو یاد گرفتیم:

  • استفاده از Template ها و ریختن قالب در فایل جداگانه
  • مبحث Static و استفاده از استایل جداگانه

توی این قسمت می خواهیم در مورد این ها صحبت کنیم:

  • استفاده از Url variables
  • انجام عملیات redirect یا تغییر مسیر

شاید این ها به ظاهر ساده بیان ولی به وقتی واردشون بشید، جالب میشه!

بریم که شروع کنیم ...

یکی از قابلیتی که فلسک داره اینه که ما می تونیم یک قسمتی از ادرس route رو متغیر کنیم. این مثلا کجا ها استفاده می شه؟ الان می گم.

برای مثال این ادرس صفحه ی "همه ی مطالب" یک سایت هست:

https://example.com/posts/

ما می خواهیم کاری کنیم که اگر نام هر مطلب بعد / آخر قرار بگیرد اون مطلب از دیتابیس خونده بشه و به کاربر نمایش داده بشه. مثال:

https://example.com/posts/make-site-with-python

می تونیم برای همین مثال توی کدمون یک روت تعریف کنیم، فقط ما چون دیتابیس نداریم یک صفحه ی شبیه به صفحه ی مطالب ارسال می کنیم و عنوان رو توی اون قرار می دیم. یک لیست هم برای مطالبی که وجود دارند به صورت دستی تعریف می کنیم.

add to app.py:

@app.route('/posts/<post_name>')
def posts(post_name):
    all_posts = ['make-site-with-python', 'how-to-make-cake', 'all-os-can-show-gui', 'captain code coding']
    if post_name in all_posts:
        post_name = post_name.replace(&quot-&quot, &quot &quot)
        return render_template(&quotposts.html&quot, name=post_name, content=f&quotThis is content of <b>{post_name}</b> post&quot)
    else:
        return &quotPost Not Found!&quot

templates/posts.html:

<!doctype html>
<html lang=&quoten&quot>
<head>
    <meta charset=&quotUTF-8&quot>
    <meta name=&quotviewport&quot
          content=&quotwidth=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0&quot>
    <meta http-equiv=&quotX-UA-Compatible&quot content=&quotie=edge&quot>
    <link rel=&quotstylesheet&quot href=&quot/static/styles/styles.css&quot>
    <title>{{ name }}</title>
</head>
<body>

<h1>{{ name }}</h1>
<p>
    {{ content|safe }}
</p>

</body>
</html>

همونطور که دیدید از <> استفاده کردیم تا بتوانیم یک متغیر رو توی url بسازیم. بعد برای فانکشنِ روت، یک ورودی گرفتیم و از اون طریق نام مطلب رو بدست آوردیم. بقیه اش هم خیلی ساده و واضح هست. خودتون بلدید.

همه کد ها هر قسمت رو توی یک مخزن در گیت هاب ذخیره کردم. می تونید از قسمت انتخاب برنچ جلسه رو انتخاب کنید و پروژه رو تا توی اون قسمت ببینید.
https://github.com/safakamali/flask-beginner-course
از این قسمت می تونید جلسه رو انتخاب کنید.
از این قسمت می تونید جلسه رو انتخاب کنید.

انجام عملیات redirect یا تغییر مسیر

بیاین برای این موضوع قدم به قدم پیش بریم:

1) from flask import Flask, render_template, redirect, url_for

2) کاری کنیم که اگر مطلب مساوی با captain code coding بود، ما را به صفحه ی درباره بفرست.

@app.route('/posts/<post_name>')
def posts(post_name):
    all_posts = ['make-site-with-python', 'how-to-make-cake', 'all-os-can-show-gui', 'captain-code-coding']
    if post_name == all_posts[3]: # captain code coding
        return redirect(url_for('about'))
    elif post_name in all_posts:
        post_name = post_name.replace(&quot-&quot, &quot &quot)
        return render_template(&quotposts.html&quot, name=post_name, content=f&quotThis is content of <b>{post_name}</b> post&quot)
    else:
        return &quotPost Not Found!&quot

توضیحات: تابع redirect یک ادرس می گیره و ما رو به اون صفحه ریدایرکت می کنه. ولی ما برای اینکه کارمون نظم داشته باشه و بعد راحت تر باشیم، از url_for استفاده کردیم. در url_for نام روت توی برنامه مون رو میدیم و متغیر های url رو هم میدیم و برای ما یک ریدایریکت اساسی و خلاصه ... درست می کنه.

خودتون تست کنید!
بعدا در پروژه ها از این زیاد استفاده می کنیم برای مثال بخش ثبت نام یا ورود.

این قسمت هم به پایان رسید ...

همون طور که گفتم یک مخزن کد توی گیتهاب ساختم و کد های هر جلسه رو توی اون می گذارم. این پیشنهاد دوست عزیز امیرمحمد پوراسمی بود. می تونید این مخزن رو ⭐ کنید تا همیشه در دسترستون باشه.

https://github.com/safakamali/flask-beginner-course


اگر سوال یا پیشنهادی دارید می تونید توی نظرات مطرح کنید. اگر هم مطلب جاییش اشکال داشت باز هم همینطور. اگر مطلب رو دوست داشتید ❤️ و اگر می خواهید این دوره رو دنبال کنید، انتشارات کاپیتان کد رو دنبال کنید.