انشاء منشور باستخدام بايثون في devto
Tags: api, python, webdev
Published: 2022-08-10 18:37:00

### اكو مقولة جدا جميلة عن المبرمجين 
> I always choose a lazy programmer to do the difficult job, because lazy programmer will find an easy way to do it.
> <small>bill gates.</small>

قد تسالني كيف يمكن ان يكون الكسل شيء جيد؟ راح نجاوب هذا السؤال في هذا البوست من خلال بناء مشروع ينشىء بوست جديد في  باستخدام لغة برمجة بايثون dev.toموقع

---


## راح نستخدم: 

1. dev.to api حتى نسوي الباك اند
2. python كلغة برمجة
3. localhost نسوي من خلاله سيرفر بسيط في flask

---

 
 
اول شي نحضر الفايلات 
![createing files](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2e3g4vs0q0ia9x6u0vys.png "فايلات")
 
-------


راح نحتاج ننزل هاي بكجات بايثون حتى نكمل المشروع عن طريق cmdكتابة هاي السطر في 

```temminal
pip install requests flask 
```




------
بسيط flask هسة خلونا نحضر البكجات بايثون ونسوي سيرفر 

```python
# بكجات 
from flask import Flask, render_template
import requests

# برنامجنا
app = Flask(__name__)


# الي سويناه html هنا نسوي فد راوت في موقع راح يرجعنا فايل 
@app.route("/create", methods=['GET', 'POST'])
def get_create():
    if request.method == 'GET':
        return render_template('create.html')


# هذا كود نكتبه حتة السيرفر يشتغل
if __name__ == '__main__':
    app.run(debug=True)
```

--- 

## html حلو, سيرفر جاهز بس بعدنا ما كاتبين شي في فايل 
html فخلونا نكتب اشوية

```html
<!-- /templates/html احنا في  --->
<!-- علمود اشوية ستايل tailwindcss طبعا راح استخدم  --->

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="https://cdn.tailwindcss.com"></script>
  </head>
  <body>
    <div class="root text-white bg-slate-900 h-screen w-full">
      <div class="text-center text-3xl pt-5 font-bold">create a new post</div>

      <form
        class="flex text-blue-600 flex-col gap-2 mx-auto w-max pt-20"
        action="http://127.0.0.1:5000/create"
        method="post"
      >
        <input required type="text" name="title" placeholder="title" />
        <textarea
          type="text"
          name="body_markdown"
          placeholder="body_markdown"
        ></textarea>
        <input required type="text" name="published" placeholder="published" />
        <input required type="text" name="tags" placeholder="tags" />
        <input
          required
          type="text"
          name="cover_image"
          placeholder="cover_image"
        />
        <input type="submit" value="submit" />
      </form>
    </div>
  </body>
</html>
```


## بعدين خلونا نبدي السيرفر
```termminal
python app.py
```


> وراح نشوف هذا الشكل http://localhost:5000/create نفتح 
![first look in webpage](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ru73lqe4qsljzhyvf8u2.png "الشكل الاولاني")

---

### dev.to من موقع api key قبل ما نبدي للباك اند نحتاج 

1. https://dev.to/settings/extensions نروح على 

2. generate api key ننزل لاخر شي في الصفحة نكتب اسم و نضغط 
![generateing api key](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cu38ekmm5jmg6fkfj2g3.png)

3. الي انطونه ياه بالنسبة الي api key ننسخ 
> HtLrrPjaAfJdhxpTUJ5jKMxd

---


### backend سوينا البناء الاساسي هسة اشوية

```python
## هذا فنكشن راح يسوي بوست جديد
def Post_to_dev_to(title, body, tags, published, cover):
    headers = {
    'api-key': 'HtLrrPjaAfJdhxpTUJ5jKMxd', # اكتب رمز الي عندك بدال هذا
    }

    json_data = {
        'article': {
            'body_markdown': """
            ---
            title: {}
            published: {}
            tags: {}
            cover_image: {}
            ---
            {}
            """ .format(title, published, tags, cover, body),
        },
    }


    response = requests.post('https://dev.to/api/articles', headers=headers, json=json_data)
```



## بالنهاية نضيف الفنكشن للراوت الي سويناه من قبل
```python 
@app.route("/create", methods=['GET', 'POST'])
def get_create():
    if request.method == 'POST':
        title = request.form['title']
        body_markdown = request.form['body_markdown']
        published = request.form['published']
        tags = request.form['tags']
        cover_image = request.form['cover_image']

        Post_to_dev_to(title, body_markdown, tags, published, cover_image)
        return redirect(url_for('get_create'))
    else:
        return render_template('create.html')
```

---

## هذا هو كل شي نبدي البرنامج
```termminal
python app.py
```



> اذا عندك اي مشكلة او سؤال تكدر تسال مني في كومنتات